配置服务端
安装、配置Nginx
服务器托管在云服务器系统Ubuntu 22.04LTS,本地系统Windows 11 x64。
系统预装了git和gcc,我们直接apt安装^nginx即可。apt安装的软件的配置文件都在 /etc/AppName下。
sudo apt install nginx
现在Ubuntu系统的防火墙会阻止我们访问网站,因此,你需要放行iptables端口:
1 2 3 4 5 | sudo apt update sudo apt install iptables sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT sudo iptables -save |
这样设置的iptables
会在重启之后失效,为了让iptables
规则持久生效,安装iptables-persistent
。
1 2 3 | sudo apt install iptables-persistent sudo netfilter-persistent save sudo netfilter-persistent reload |
现在,直接访问服务器的IP,就可以看到Nginx的欢迎界面了!
我们需要一个存着所有网页文件网站目录。我们先新建一个目录。如果你已经有网页文件,放到里面即可。
mkdir -p /home/www/hexo
然后配置Nginx。Nginx可以在一台服务器上用同一个IP托管多个网站,其中/etc/nginx/sites-available
中存储所有可用的网站配置文件,每一个配置文件对应一个网站。在/etc/nginx/sites-enabled
中使用软链接指向sites-available
中的配置文件,这里的配置文件才会被Nginx使用。这么做的好处是,可以通过添加/删除软链接来管理哪些网站可以被访问,而无需触及真正的配置文件。
现在你可以删除sites-enabled
中的 default
配置文件的符号链接,防止网站访客看到Nginx的欢迎界面——否则会显得有点业余 :)
1 | rm /etc/nginx/sites-enabled/default |
接下来我们创建自己的配置文件。/etc/nginx/sites-available/default
这个文件就是我们刚删除的那个软链接对应的配置文件,它除了显示欢迎页面以外,还有作为“Server Block”配置参考的作用。“Server Block”就是Nginx的网站配置区块,配置起来很方便。接下来我们在sites-available
中创建自己的配置文件。
sudo vim /etc/nginx/sites-available/ljj-blog
在其中添加如下内容:
1 2 3 4 5 6 7 8 | server { listen 80; server_name www.域名.cn; location / { root /home/www/hexo; index index.html; } } |
然后,在sites-enabled
中添加指向它的符号链接来启用它。
1 | sudo ln -s /etc/nginx/sites-available/ljj-blog /etc/nginx/sites-enabled/ljj-blog |
80
就是nginx的默认端口(apt安装nginx的时候会自动放行),server_name
后面跟的是域名,多个域名之间用空格隔开,注意每行必须以英文分号结束。下面location /
的意思是以/
结尾的URL(也就是域名本身)的目录在/home/www/hexo
下面(我们刚刚创建了它)。如果需要托管多个网站,只需要像这样添加多个配置文件即可。这样,Nginx配置文件就编写好了。
现在我们检查一下配置文件是否存在语法错误。
1 | sudo nginx -t |
如果输出
1 2 | nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
那就说明Nginx准备好了!接下来重启Nginx来应用配置文件:
1 | sudo systemctl restart nginx |
安装Node.js和npm
在终端中输入
1 2 | sudo apt install nodejs sudo apt install npm |
配置 Git
通过新建一个git用户的方式实现hexo自动部署。
1 2 3 4 5 6 | #添加名为"git" 的用户,这时除了密码,还会要求你填房间号、电话之类的,留空即可。 sudo adduser git #修改git用户的权限为740 sudo chmod 740 /etc/sudoers #打开文件 sudo vim /etc/sudoers |
在root下面添加git(模仿root的格式)
1 | git ALL=(ALL:ALL) ALL |
把git用户的权限改回去
1 | chmod 400 /etc/sudoers |
接下来把本地的^公钥上传到服务器。首先,你得有一个公钥。如果你以前用过git,你可以在C:\user\YOURUSER\.ssh
下找到id_rsa.pub
。如果没有,先生成。 在本地电脑终端上运行:
1 2 3 | cd ~ cd .ssh ssh-keygen |
在FTP连接前,我们要先打开允许密码登录。在服务器上切换到root用户。
1 | sudo su |
修改SSH配置文件,把PasswordAuthentication
设为yes
。为以后使用考虑,也可以把PermitRootLogin
也设为yes
。这样我们就可以使用密码连接FTP了,即使是root用户也可以。
1 | sudo vim /etc/ssh/sshd_config |
然后重启服务器。
1 | reboot |
请自行下载FileZilla软件,在主机项填写 sftp://服务器IP,用户名填git,端口号填22。点击快速连接即可连接到远端服务器。
把本地的id_rsa.pub文件拖动到服务器的/home/git/.ssh
文件夹下。
回到服务器端,以 Git 用户身份在 .ssh
文件夹内新建 authorized_keys
文件,并将公钥内容拷贝到该文件中。
1 2 3 | cd ~/.ssh cp id_rsa.pub authorized_keys cat id_rsa.pub >> ~/.ssh/authorized_keys |
修改文件权限。
1 2 | chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh |
由于Linux和Windows的文件尾不一样,为了防止出错,需要确保设置了正确的SELinux上下文。首先,安装必需的软件。
1 | apt install policycoreutils |
然后运行
1 | restorecon -Rv ~/.ssh |
现在我们来测试一下是否设置成功。在本地任意位置右键打开Git Bash,输入:
1 | ssh -v git@你的公网IP |
期间会问你要不要接收数字指纹,输入yes
即可。如果出现Linux命令行界面,说明我们配置成功了。
接下来在服务端配置Git仓库。
在服务端切换到git用户
1 | su git |
创建 post-receive 钩子文件。
1 2 3 | cd ~ git init --bare hexo.git vim ~/hexo.git/hooks/post-receive |
输入以下内容:
1 | git --work-tree=/home/www/hexo --git-dir=/home/git/hexo.git checkout -f |
授予钩子文件可执行权限。
1 2 3 | chmod +x ~/hexo.git/hooks/post-receive cd ~ sudo chmod -R 777 /home/www/hexo |
重启服务器。
1 | reboot |
这样,我们就完成了服务端的配置。
本地配置
安装 Node.js
到 Node.js 官网下载长期支持版。
在本地电脑终端上运行以下代码,输出版本号,测试是否安装成功:
1 2 | node -v npm -v |
安装hexo
首先,找一个你喜欢的目录,在这里打开Git Bash,输入:
1 | npm install -g hexo-cli |
在此目录下创建blog文件夹(你可以改成你喜欢的名字ljj-blog):
1 2 3 | hexo init ljj-blog cd ljj-blog npm install |
这个文件夹就成为你博客的根目录。在blog文件夹(ljj-blog) 打开Git Bash:
1 2 | npm install hexo-deployer-git --save npm install hexo-server |
如果你还没有,配置Git全局变量:
1 2 | git config --global user.email "你的邮箱@mail.com" git config --global user.name "你的名字" |
在博客的根目录(ljj-blog) 下打开Git bash,输入:
1 2 3 | hexo server 或 hexo s |
这时终端会显示本地链接,一般是http://localhost:4000
,打开它就能在本地预览博客。
同步博客到服务端
进入本地计算机blog文件夹的根目录,找到_config.yml文件并打开。找到deploy
行,将其修改为如下内容:
1 2 3 4 5 | deploy: type: git repo: gcp: git@你的IP:/home/git/hexo.git branch: master |
此外,还可以找到url项将其修改为自己的域名。
激动人心的时刻到了!把博客推送到服务器!
如果使用git bash,实际上就是cmd,使用这个命令:
1 | hexo cl && hexo g && hexo d |
如果使用现代得多、好用得多的PowerShell,用以下命令,主要是命令分隔符的不同:
1 | hexo cl; hexo g; hexo d |
设置PowerShell Alias,简化命令
每次都要在本地博客文件夹下打开git bash或者Powershell再输入上面的命令未免太麻烦,接下来配置一下让我们输入hexo2themoon
这个命令来一键推送。
打开PowerShell,输入
1 | echo $PROFILE |
得到配置文件的路径与文件名。在里面输入以下内容:
1 | function hexo2themoon {cd "C:\dev\blog";hexo cl; hexo g; hexo d} |
这会创建一个PowerShell函数,先切换到博客文件夹下,再执行推送文件的操作。
为了让PowerShell每次启动时都加载这个文件,用管理员模式打开PowerShell,输入命令
1 | Set-ExecutionPolicy RemoteSigned |
重启PowerShell,大功告成!快去试试hexo2themoon
命令吧!
进阶操作
配置HTTPS
使用Certbot配置SSL证书【ubuntu系统】
Step1:安装snapd【linux包管理工具】
sudo apt install snapd # 安装snapd
sudo snap install core # 安装core
sudo snap refresh core # 刷新core
Step2::安装certbot【一个开源免费的工具,为网站自动安装基于Let’s Encrypt服务的SSL证书】
sudo snap install --classic certbot # 安装certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot # 创建链接以确保certbot的正确运行
Step3:创建SSL证书【使用certbot创建ssl证书】
# 为所有域创建 SSL 证书并在 Web 服务器中配置重定向
sudo certbot --nginx # nginx安装ssl证书
# 或只获取证书:
# sudo certbot certonly --nginx
sudo certbot --apache # apache安装ssl证书
在SSL证书到期前,输入
1 | sudo certbot renew |
即可续签所有证书。