由于已经开通的 Hexo 和 Vuepress 博客,都挂在 github 的免费服务器上,加载速度不堪忍睹,所以打算挂在阿里云的服务器上,过程可以用举步维艰来形容。
使用 ssh 远程登录
- Ubuntu 常用命令:
1 | # 更新源列表 |
使用 ssh 登录:
1 | ssh root@47.101.33.81 |
由于之前我远程登录过 CentOS,所以换成 Ubuntu 之后,再次远程登录,就会出现如下无法连接信息:
1 | ~ ❯❯❯ ssh root@47.101.33.81 |
所以,根据提示,我就进入目录下,删除了之前保留的信息:
1 | ~ ❯❯❯ vim /Users/yangtao/.ssh/known_hosts |
然后,保存,再次登录,就会重新设置,也就远程登录成功。
在 Ubuntu 18.04 上安装和配置 Nginx
安装 Nginx
我习惯 fish,可以预装一下:
1 | apt install fish |
注:如果遇到权限问题,需要 sudo
,如:sudo apt install fish
。
Nginx 的软件包在 Ubuntu 默认软件仓库中可用。 安装非常简单,只需键入以下命令:
1 | apt update |
检查 Nginx 服务的状态:
1 | systemctl status nginx |
查看版本:
1 | root@istaotao ~# nginx -v |
然后访问公网 ip,或者域名,就可以看到欢迎界面,如果长时间没有响应,说明你的服务器应该没有开启 80 端口。
使用 systemctl 管理 Nginx 服务
您可以像任何其他 systemd 单位一样管理 Nginx 服务:
1 | # 要停止Nginx服务,请运行: |
也可以使用 service 管理 Nginx 服务:
1 | # 停止Nginx服务,请运行: |
其他命令
获得应用程序配置文件的列表:ufw app list
,查看状态:ufw status
1 | root@istaotao ~# ufw app list |
Nginx 文件和目录说明
nginx 服务器配置文件:
- /etc/nginx
Nginx 配置目录。所有的 Nginx 配置文件都驻留在这里。
- /etc/nginx/nginx.conf
主要的 Nginx 配置文件。 这可以修改,以更改 Nginx 全局配置。
- /etc/nginx/sites-available/
可存储每个站点服务器块的目录。 除非将 Nginx 链接到sites-enabled了sites-enabled
目录,否则 Nginx 不会使用此目录中的配置文件。 通常,所有服务器块配置都在此目录中完成,然后通过链接到其他目录启用。
- /etc/nginx/sites-enabled/
存储启用的每个站点服务器块的目录。 通常,这些是通过链接到 sites-available 目录中的配置文件创建的。
- /etc/nginx/snippets
这个目录包含可以包含在 Nginx 配置其他地方的配置片段。 可重复配置的片段可以重构为片段。
nginx 服务器日志文件:
- /var/log/nginx/access.log
除非 Nginx 配置为其他方式,否则每个对您的 Web 服务器的请求都会记录在此日志文件中。
- /var/log/nginx/error.log
任何 Nginx 错误都会记录在这个日志中。
虚拟站点的设置
Ubuntu 18.04 上的 Nginx 默认启用了一个服务器模块,该模块被配置为在/var/www/html
目录下提供文档内容。
接下来,我们模拟一个虚拟网点。
创建example.com
目录,使用-p
标志创建任何必需的父目录:
1 | sudo mkdir -p /var/www/example.com/html |
使用\$USER 环境变量分配目录的所有权:
1 | sudo chown -R $USER:$USER /var/www/example.com/html/ |
修改目录的权限:
1 | sudo chmod -R 755 /var/www/example.com/html/ |
创建一个 index.html 页面:
1 | /var/www/example.com/html/index.html |
如:
1 | <html> |
在不直接修改默认配置文件的情况下,可以在/etc/nginx/sites-available/
上创建一个新文件example.com
,并将如下内容复制到example.com
:
1 | server { |
操作方法:
1 | cd /etc/nginx/sites-available/ |
常规复制完毕之后,按:
之后,接着按wq
,vim 就可以保存退出了。
创建一个软链接,连到默认启动sites-enabled
目录来启用该文件,该目录是 Nginx 在启动过程中读取的:
1 | sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ |
现在启用两个服务器模块并将其配置为基于listen
和server_name
指令响应请求:
example.com :将响应example.com
和www.example.com
请求。
default :将响应端口80
上与其他两个块不匹配的任何请求。
为了避免添加额外的服务器名称可能导致的哈希桶内存问题,有必要调整/etc/nginx/nginx.conf
文件中的单个值。
修改配置文件:
1 | sudo vim /etc/nginx/nginx.conf |
找到server_names_hash_bucket_size 64
指令并删除 # 符号以取消注释该行:
接下来,测试以确保您的 Nginx 文件中没有语法错误:
1 | sudo nginx -t |
重启 nginx:
1 | sudo systemctl restart nginx |
然后,需要在本地 hosts 文件添加对应 host:
1 | # ip 换成自己的阿里云 ip |
这样,不出意外的话,就可以通过 http://example.com
来访问刚刚设置的内容,而访问http://47.101.33.81
,依旧是默认的内容。
hexo 部署到服务器上
整个流程就是本地将 *.md 渲染成静态文件,然后 Git 推送到服务器的 repository,服务器再通过 git-hooks 同步网站根目录。
服务器配置
主要使用 git hooks
来实现自动化部署。以下步骤为其他博客完整内容,但是我是直接在 root 下操作的,所以关于权限等问题,是直接略过的,等后期熟悉了再加上。
第一步
安装 git:
1 | sudo apt-get install git |
第二步
创建一个 git 用户,用来运行 git 服务:
1 | sudo adduser git |
虽说现在的仓库只有我们自己在使用,新建一个 git 用户显得不是很有必要,但是为了安全起见,还是建议使用单独的 git 用户来专门运行 git 服务。
第三步
创建证书登录,把自己电脑的公钥,也就是 ~/.ssh/id_rsa.pub
文件里的内容添加到服务器的 /home/git/.ssh/authorized_keys
文件中,添加公钥之后可以防止每次 push 都输入密码。
如果你之前没有生成过公钥,则可能就没有 id_rsa.pub 文件,具体的生成方法,可以Generating a new SSH key and adding it to the ssh-agent。
第四步
初始化 Git 仓库,我是将其放在 /var/repo/hexo.git
目录下的
1 | sudo mkdir /var/repo |
使用 --bare
参数,Git 就会创建一个裸仓库,裸仓库没有工作区,我们不会在裸仓库上进行操作,它只为共享而存在。
第五步
配置 git hooks,关于 hooks 的详情内容可以自定义 Git - Git 钩子。
我们这里要使用的是 post-receive
的 hook,这个 hook 会在整个 git 操作过程完结以后被运行。
在 hexo.git/hooks
目录下新建一个 post-receive
文件:
1 | cd /var/repo/blog.git/hooks |
在 post-receive
文件中写入如下内容:
1 |
|
注意,/var/www/hexo
要换成你自己的部署目录,一般可能都是 /var/www/html
。上面那句 git 命令可以在我们每次 push 完之后,把部署目录更新到博客的最新生成状态。这样便可以完成达到自动部署的目的了。
不要忘记设置这个文件的可执行权限:
1 | chmod +x post-receive |
第六步
改变 hexo.git 目录的拥有者为 git 用户:
1 | sudo chown -R git:git blog.git |
第七步
禁用 git 用户的 shell 登录权限。
出于安全考虑,我们要让 git 用户不能通过 shell 登录。可以编辑 /etc/passwd
来实现,在 /etc/passwd
中找到类似下面的一行:
1 | git:x:1001:1001:,,,:/home/git:/bin/bash |
将其改为:
1 | git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell |
这样 git 用户可以通过 ssh 正常使用 git,但是无法登录 sehll。
第八步
修改 nginx 配置文件:
1 | vim /etc/nginx/sites-enabled/default |
至此,服务器端的配置就完成了。
本地配置
修改 Hexo 博客站点配置文件 _config.yml, 如下修改:
1 | deploy: |
repo 格式:用户名@域名或 IP 地址:/var/repo/hexo.git,如:
1 | # root 域名 |
然后就是 hexo 的常规操作了:
1 | # 清楚缓存 |
可以多部署几次,然后去 /var/www/hexo
看是否已经有对应内容,如果推送完之后,提示已无更新内容可提交,可以改写东西,重新构建部署等步骤,多试几次。
到这里,基本完成 Hexo 推送到 ubuntu 的任务, 通过服务器 IP 或者域名应该就可以看到博客的内容了。
vuepress 部署到服务器上
有了部署 Hexo 的经验,再部署 vuepress,就简单多了。
我的想法是:hexo 做首页,vuepress 做子页内容,比如:http:yangtao.site/vuepress
。所以,建立 git hooks 就应该可以了。
服务端配置
第一步:修改 nginx 配置文件:
1 | vim /etc/nginx/sites-enabled/default |
找到 location / {
,然后在其后面,输入一段:
1 | # 找到如下 |
然后在var/www
下新建 vuepress 目录:
1 | cd /var/www/ |
这样,对用要访问的目录已经创建好了。
注:以上操作都是在 root 权限下操作的,如果是其他用户,记得该加 sudo 的加 sudo,该修改文件权限就修改。
第二步:建立 git hooks
如同建立 hexo.git
一样:
初始化:
1 | cd /var/repo |
建立 post-receive
:
1 | cd vuepress.git/hooks/ |
并写入:
1 |
|
设置这个文件的可执行权限:
1 | chmod +x post-receive |
好了,服务端的配置差不多就这些。
本地配置
具体的可以参考官方部署方法。
第一步:根目录下创建执行脚本deploy.sh
:
1 |
|
第二步:修改config.js
的基准 url
1 | const config = { |
这样,访问 http://47.101.33.81/vuepress
,就可以正常访问,这里非常关键,如果是根目录,直接去掉 vuepress,重新构建部署。
第三步:部署线上
1 | sh deploy.sh |
注意:可以多部署几次,访问资源如有问题,估计是第二步出问题了,可以排查哪里出错了。
好了,截止到现在,访问http://47.101.33.81
,访问的是 hexo 的博客资源,而访问http://47.101.33.81/vuepress
,访问的是 vuepress 的博客资源。
主要是 nginx 的配置文件,以及 git hooks 的建立,还有本地部署文件的建设,一个简单的个人网站算是颤颤巍巍地站起来了。
资料
学习资料
- 在 Ubuntu Server 下搭建 LAMP 环境 - 让你理解 LAMP 环境各个组件之间的关系与作用,并能掌握从无到有的在 Ubuntu Server 操作系统下搭建 LAMP 环境、配置虚拟主机、数据库远程维护等常见的服务器搭建维护技能
- 优雅玩转 Vim - 本课程系统提炼 vim 的精华、通过抛砖引玉把它展现到你的面前,更能让你的工作如虎添翼、事半功倍。
- 玩转 Vim 从放弃到爱不释手 - 本课程从 vim 最基础的操作和概念开始讲起,带领大家学会使用和配置 vim,安装强大的 vim 插件,真正掌握编辑器之神 vim 的使用。
- 项目上线流程 - 主要讲解了一个项目想要发布到公网的流程,包括服务器的购买、以及域名的购买,以及需要注意的事项。
- Linux 达人养成计划 I - 课程以 CentOS 操作系统为例,为你带来 Linux 的简介、系统安装和常用命令等内容。让您在轻松的氛围中感受到 Linux 之美。