静态网站需要在服务器上安装什么,通过Git简易的部署静态站点

这篇博客介绍了如何设置远程服务器,通过SSH无密访问,初始化Git仓库,并配置发送-接收钩子来自动化部署静态站点。过程包括生成SSH key,创建服务器目录,初始化Git仓库,编写Makefile实现构建和部署任务,以及使用Git进行版本控制和标记部署状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作:

一个远程服务器来托管你的站点。

通过SSH访问远程服务器。

在远程服务器上安装Git(通过指令git --version来检查是否安装)。

如果需要,请生成一个SSH key

在服务器端

设置无密码的SSH访问

首先,你需要通过SSH连接到你的服务器,如果有提示的话请输入密码。

ssh user@hostname

如果在你的用户的主目录中没有~/.ssh目录,请创建一个:mkdir ~/.ssh

接下来,你需要复制你的公共SSH key(请看生成一个SSH key)到你的服务器。这样你就可以通过SSH连接,并且不需要每次都输入密码。

在你的本地 - 假设你的公共key可以在~/.ssh/id_rsa.pub找到 - 使用正确的用户和主机名称输入下面的指令。它将会把你的公共秘钥(key)添加到远程服务器的authorized_keys文件。

ssh user@hostname 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub

如果你关闭连接,并且尝试建立SSH访问,你应该不再会被提示输入密码。

创建远程目录

你需要为每个域名建立2个目录。一个作为Git的仓库,另一个包含其他信息。

举个栗子,如果你的域名是example.com,并且你想要建立一个环境,那么你需要在你的服务器上建立这些目录:

mkdir ~/example.com ~/example.git

mkdir ~/staging.example.com ~/staging.example.git

初始化空的Git仓库

在服务器上创建空的Git仓库,也就是把本地文件(资源)传送到服务器储存的地方。但是你不想要的文件在这里,这就是为什么这是一个空的仓库。

cd ~/example.git

git init --bare

如果你想的话,你可以重复此步骤。

写一个发送-接收钩子

一个发送-接收钩子可以让你在Git仓库接收到commits后运行指令。这样,你可以改变Git的工作目录,从example.git 到 example.com,并且检查在example.com目录下的副本。

工作目录的位置可以使用GIT_WORK_TREE在per-command的基础上设置,Git的环境变量中其中一个或者work-tree选项。

cat > hooks/post-receive

#!/bin/sh

WEB_DIR=/path/to/example.com

# remove any untracked files and directories

git --work-tree=${WEB_DIR} clean -fd

# force checkout of the latest deploy

git --work-tree=${WEB_DIR} checkout --force

确保hook上的文件权限正确。

chmod +x hooks/post-receive

如果你需要使一些文件不被Git清理(比如.htpasswd文件),你可以使用--exclude选项。这需要在你的服务器上安装Git 1.7.3或者以上版本。

git --work-tree=${WEB_DIR} clean -fd --exclude=

如果你想的话,可以重复此步骤。

在本地机器上操作

现在,服务器配置已经完成,你想要为静态站点部署build assets(不是源码)。

构建和部署任务

我正在使用生成文件(Makefile),但是你可以使用任何你擅长的。下面是我想要自动化完成的基本工作流程。

建立静态站点的生产版本。

make build

初始化一个新的Git repo在构建目录中。 我不想尝试合并到之前部署的文件,尤其是对于分段域(staging domain)。

git init ./build

远程部署

cd ./build git remote add origin ssh://user@hostname/~/example.git

commit repo中的所有内容

cd ./build git add -A git commit -m "Release"

强制转换远程主分支, 如果丢失的话,则创建它。

cd ./build git push -f origin +master:refs/heads/master

在源repo中标记出检查commit的SHA,于是我可以看到哪个是最新部署。

git tag -f production

使用一个生成文件:

BUILD_DIR := ./build

STAGING_REPO = ssh://user@hostname/~/staging.example.git

PROD_REPO = ssh://user@hostname/~/example.git

install:

npm install

# Deploy tasks

staging: build git-staging deploy

@ git tag -f staging

@ echo "Staging deploy complete"

prod: build git-prod deploy

@ git tag -f production

@ echo "Production deploy complete"

# Build tasks

build: clean

# whatever your build step is

# Sub-tasks

clean:

@ rm -rf $(BUILD_DIR)

git-prod:

@ cd $(BUILD_DIR) && \

git init && \

git remote add origin $(PROD_REPO)

git-staging:

@ cd $(BUILD_DIR) && \

git init && \

git remote add origin $(STAGING_REPO)

deploy:

@ cd $(BUILD_DIR) && \

git add -A && \

git commit -m "Release" && \

git push -f origin +master:refs/heads/master

.PHONY: install build clean deploy git-prod git-staging prod staging

分阶段部署:

make staging

部署生产:

make prod

使用Make,,因为cd命令在子流程中。但是你需要确保后来的命令在同一行中。举个栗子:如果没有在命令中加入&& 或 ;,那么deploy任务会强制推送到你源代码的远程主分支。

我把我的站点源码传到了BitBucket一个私人的仓库。BitBucket其中一个很不错的地方在于可让你选择防止误删除或者重写分支。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值