获取一个云端主机并登录
在腾讯云/阿里云/华为云等平台上购买一个云服务器,搭建个人博客时可以选取轻量应用服务器,便宜。
可以获取到主机的公网ip地址。
可以xshell
登录,也可以使用PuTTY
,甚至腾讯云自己有很好用的后台可以用。
我这里云服务器安装的是linux操作系统,linux操作系统主流产品包括Ubuntu和centos等,我安装的是Ubuntu Server 22.04 LTS 64bit
安装nginx
依次执行以下命令
# 更新软件库
sudo apt-get update
sudo apt-get upgrade
# 安装
sudo apt install nginx
安装完成后,访问http://公网IP ,如果出现初始化页面,即成功安装。
默认nginx安装文件夹在/etc/nginx/ 下,文件夹下有一些配置文件
cd /etc/nginx
nginx默认读取的文件夹在/var/www/html/ 下,可以通过修改配置来修改这个文件夹的位置,但是不建议修改!
cd /var/www/html
可以在这个文件夹中看到index.html文件,这就是访问http://公网IP 时默认的主页,可以简单修改一下这个文件,来看看是否配置成功。
sudo vim index.html
踩坑警告:如果在这里看到的是index.nginx-debian.html文件,则使用下面的命令改回来,不然网站可能无法访问。
mv index.nginx-debian.html index.html
此时只需要将我们的hexo博客工作目录下public文件夹中的内容拷贝到/var/www/html/ 中,即可将博客站部署到云服务器。
可以手动通过xftp传文件过去,也可以配置git实现一键部署,下面分别介绍。
手动部署网页文件
在用户/home/ubuntu/ 目录下新建文件夹test
mkdir test
cd test
使用xftp或者其他传输工具,将public/ 下所有文件拷贝到此处。腾讯云自带的终端很好用,直接可以传文件。
sudo cp -r /home/ubuntu/test/* /var/www/html/
即可完成文件拷贝,现在打开http://公网IP 网页,可以发现网站部署成功。
下次写了新的博客之后,先将/var/www/html/ 文件夹下原有文件删除,再复制过来,以避免潜在的问题。
# 先删去旧文件
sudo rm -r /var/www/html/*
# 再将新的文件复制进去
sudo cp -r /home/ubuntu/test/* /var/www/html/
这种办法简单,易于理解。不过如果每次写博客时都要登录、传输文件、复制文件,实在是麻烦,因此考虑一键部署的办法。
git实现远程ssh部署
创建空仓库
一种做法是新建一个用户专用于ssh远程登陆,也可以直接使用默认用户。使用默认的ubuntu用户比较方便简单。 先创建一个空仓库,例如创建一个名为john.git的仓库
cd /home/ubuntu
mkdir htmltest
cd htmltest
git init --bare john.git
创建钩子文件
cd john.git/hooks #进入hooks文件夹
vim post-receive //创建hook钩子函数文件(git提交时自动部署)
输入以下内容:
#!/bin/sh
git --work-tree=/var/www/html --git-dir=/home/ubuntu/htmltest/john.git checkout -f
回到本地,测试一下仓库能否被正常拉取,如果能被正常拉取,则一切正常
git clone ubuntu@服务器公网IP:/home/ubuntu/htmltest/john.git
配置ssh免密连接
创建本地和云主机的远程免密连接: 找到本地的公钥文件,windows用户一般在C:\Users\用户名.ssh文件夹下,找到id_rsa.pub文件,复制其中的所有内容,注意必须有一个空行。
如何在windows上创建ssh密钥对:参阅微软官方文档OpenSSH for Windows 中基于密钥的身份验证
如果没有.ssh文件夹,就需要先配置ssh服务
sudo apt-get install openssh-server
/etc/init.d/ssh start
/etc/init.d/ssh restart
ssh-keygen
# 连续回车,即可
cd .ssh
touch authorized_keys #存放客户端的ssh公钥(id_rsa.pub)
vim authorized_keys #将id_rsa.pub文件中内容复制进去,注意必须在最后有一行空行
chmod 600 authorized_keys #配置权限
chmod 700 .ssh
然后在本地主机的命令行(windows为powershell)执行命令,测试能否登录
ssh ubuntu@公网IP
这里登录应该是不需要手动输入密码的。
如果登录成功,那么很快就要成功啦!
修改权限
重要!
# 在john.git/hooks文件夹下,修改post-receive文件权限,使其能够被正常执行
chmod +x post-receive
修改/var/www/html 文件夹权限,使ubuntu用户能够直接修改
sudo chown -R ubuntu:ubuntu /var/www/html/
在hexo中配置
deploy:
type: git
repo: ubuntu@公网IP:/home/ubuntu/htmltest/john.git
branch: master
执行部署命令:
hexo d
成功,即可。
配置SSL证书
参阅腾讯云文档
SSL(Secure Sockets Layer 安全套接层),SSL是一种安全套接层协议,是Web浏览器与Web服务器之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密。
将下载好的ssl证书文件夹下.com_bundle.crt 证书文件和.key 私钥文件从本地目录拷贝到 Nginx 服务器的 /etc/nginx 目录(此处为 Nginx 默认安装目录,请根据实际情况操作)下。
如存在权限问题,可以先拷贝到/home/ubuntu/文件夹下,再使用sudo赋予管理员权限复制过去。
查看nginx是否已安装ssl模块
nginx -V
在configure-arguments:后面查找是否有–with-http_ssl_module,如有则无需手动安装,如没有,则需要安装。
安装完成ssl模块后,修改Nginx 根目录下的 nginx.conf 文件。修改内容如下: 这里参考腾讯云官方文档示例:
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name cloud.tencent.com;
#请填写证书文件的相对路径或绝对路径
ssl_certificate cloud.tencent.com_bundle.crt;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key cloud.tencent.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
root html;
index index.html index.htm;
}
}
修改完成后,使用以下命令验证配置文件是否配置成功
sudo nginx -t
如终端反馈配置成功,则重载nginx即可
sudo nginx -s reload
重载成功后,访问https://域名 可以看到浏览器地址栏显示安全锁标识,证书安装成功。
重定向到https://www.weiyeji.com
一定要先在服务器后台放行443和80端口(服务器控制台-安全组)!否则无法成功!
添加如下代码,含义分别是将http://www.weiyeji.com 重定向到https://www.weiyeji.com ,将 http://weiyeji.com 重定向到 https://www.weiyeji.com 将https://weiyeji.com 重定向到 https://www.weiyeji.com
cd /etc/nginx/
sudo vim nginx.conf
http是侦听80端口,https是侦听443端口,301重定向是永久重定向网页。
server {
listen 80;
server_name weiyeji.com;
#把http的域名请求转成https
return 301 https://www.weiyeji.com$request_uri;
}
server {
listen 80;
#请填写绑定证书的域名
server_name www.weiyeji.com;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name weiyeji.com;
return 301 https://www.weiyeji.com$request_uri;
}
再运行
sudo nginx -t
sudo systemctl reload nginx
重新打开网页,可以发现http的网址自动重定向到了https,不带www的自动重定向到了带www的网址,成功!
apache版本
实测,apache用得更舒服。
apache,读作“阿帕奇”,跟nginx类似。
安装apache
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apache2
安装完毕后,访问http://公网IP ,如果出现初始化页面,即成功安装。
初始化页面上写了一些使用说明,包括安装目录、配置说明之类
配置文件夹
apache的配置文件夹在 /etc/apache2/ 下,默认网页目录在 /var/www/html/ 下,可以在 /var/www/html/ 下看到index.html
# 查看配置文件夹
cd /etc/apache/
ls
# 查看网页文件
cd /var/www/html/
# 修改文件夹权限
sudo chown -R ubuntu:ubuntu /var/www/html/
如果想要修改网页默认文件夹的位置,只能修改为/var/www/文件夹下的其他位置,不能在其他地方,否则报错。(也许是我没弄明白,反正不能改到其他地方去)
# 查看配置文件夹
cd /etc/apache/
# apache2.conf conf-available conf-enabled envvars magic mods-available mods-enabled ports.conf sites-available sites-enabled
配置SSL
一定要检查服务器后台是不是开放了443端口。
cd /etc/apache2/sites-available/
# 000-default.conf default-ssl.conf
# 000-default.conf是80端口的配置信息,default-ssl.conf是443端口的配置信息
sudo vim /etc/apache2/sites-available/default-ssl.conf
填入合适的信息。
<VirtualHost *:443>
DocumentRoot 网站根目录
SSLEngine on
#填写证书名称
ServerName cloud.tencent.com
#启用 SSL 功能
SSLEngine on
#证书文件的路径
SSLCertificateFile /etc/httpd/ssl/cloud.tencent.com.crt
#私钥文件的路径
SSLCertificateKeyFile /etc/httpd/ssl/cloud.tencent.com.key
#证书链文件的路径
SSLCertificateChainFile /etc/httpd/ssl/root_bundle.crt
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL
SSLHonorCipherOrder on
</VirtualHost>
然后执行下面的命令
# 为apache服务器添加ssl模块支持
sudo a2enmod ssl
# 将sites-available/default-ssl.conf文件内容添加到sites-enabled/文件夹下,使能
sudo a2ensite default-ssl
# 修改完成后,验证配置是否正确
apache2ctl -t
# Syntax OK
# 重启服务
sudo service apache2 restart
打开浏览器,输入https://域名,如浏览器地址栏显示加密小锁,则表示证书配置成功。若显示无法连接,请确保防火墙或安全组等策略有放行443端口(SSL配置端口)。
http重定向到https
也比nginx更简单!
# 打开文件
sudo vim /etc/apache2/sites-available/000-default.conf
添加内容
<VirtualHost *:80>
...
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
...
</VirtualHost>
保存,继续
sudo a2enmod rewrite
# 重启
sudo service apache2 restart
完成。
设置文件夹权限
在设置网站根目录及子目录的文件和文件夹权限时,需要确保安全性和可访问性之间的平衡。
文件夹权限
- 权限:755
- 解释: 755权限意味着文件夹的所有者拥有读、写、执行权限,组和其他用户拥有读和执行权限。这允许所有用户浏览目录和访问其内容,但只有所有者可以修改目录内容。
文件权限
- 权限:644
- 解释: 644权限意味着文件的所有者拥有读、写权限,组和其他用户拥有读权限。这确保所有用户可以读取文件内容,但只有所有者可以修改文件内容。
详细说明
- 目录权限(755):
- 所有者(u):读 (r), 写 (w), 执行 (x)
- 组(g):读 (r), 执行 (x)
- 其他用户(o):读 (r), 执行 (x)
这确保了Web服务器(如Apache)能够读取和执行目录中的文件。
- 文件权限(644):
- 所有者(u):读 (r), 写 (w)
- 组(g):读 (r)
- 其他用户(o):读 (r)
这确保了Web服务器可以读取文件内容,但防止其他用户修改文件。
设置权限的命令
假设网站根目录为 /var/www/html
,以下是设置权限的命令:
# 设置文件夹权限为755
find /var/www/html -type d -exec chmod 755 {} \;
# 设置文件权限为644
find /var/www/html -type f -exec chmod 644 {} \;
注意事项
- 避免777权限: 777权限给予所有用户读、写、执行权限,这样会带来严重的安全隐患,特别是在多用户环境或互联网上,可能会导致文件被恶意篡改或删除。
- 特定情况的权限设置: 某些情况下,可能需要给某些文件(如可执行脚本)设置不同的权限。这需要根据具体需求进行调整。
合理的权限设置不仅能确保网站的正常运行,还能有效保护网站内容的安全。