最近一直想搭建一个个人博客,最终选择了vuepress,折腾了几天终于在本地把博客搭建起来了,于是,打算把博客部署到服务器上去,这样在哪都可以访问了。
前提
购买服务器
购买服务器,像阿里云、腾讯云、天翼云等,最好是在做活动时购买(便宜),我买的是天翼云的(更便宜)。然后配置你的服务器,安全组要打开,系统推荐选CentOS 和 Ubuntu的。这里也是以Ubuntu系统开始的。
登录服务器
Ubuntu系统不像Windows系统那样可以直接登录看见桌面,全都是使用命令行来进行操作,所以基本的linux命名你要看一下。
使用命令远程连接服务器:
打开本地终端使用ssh命令登录远程服务器,后面跟你的服务器地址。root是当前用户名。
$ ssh root@180.100.xxx.xxx
使用工具登录:
推荐使用 Xshell 和 Xftp两个工具进行连接,Xshell是通过shell脚本命令来进行连接和操作云服务器,Xftp桌面化连接和操作,两个是一家的,搭配使用很清晰。
注意:登录时要看清楚你的用户名是root还是ubuntu或是其他的。
安装常用工具
1、安装node:
sudo apt-get install nodejs
sudo apt install nodejs-legacy
sudo apt install npm
更新npm的包镜像源,方便快速下载
sudo npm config set registry https://registry.npm.taobao.org
sudo npm config list
全局安装n管理器(用于管理nodejs版本)
sudo npm install n -g
安装最新的nodejs(stable版本)
sudo n stable
# 检查是否安装成功
node -v
npm -v
node安装完后在服务器上也可以像在自己电脑上安装各种依赖了
2、安装webpack
sudo npm install webpack-cli -g
sudo npm install webpack -g
3、安装git与ssh
sudo apt-get install git
sudo apt-get install ssh
4、安装nginx
sudo apt-get install nginx
# 检查是否安装成功
nginx -v
安装好的文件位置:
/usr/sbin/nginx:主程序
/etc/nginx:存放配置文件
/usr/share/nginx:存放静态文件
/var/log/nginx:存放日志
默认的html文件位置:
/var/www/html
如果这时使用 sudo nginx 启动nginx大概就可以访问你的地址了。
nginx配置:
nginx安装完成后,文件/etc/nginx/nginx.conf 是基本配置,我们可以对其进行修改,在里面添加server开启服务。也可以通过修改/etc/nginx/conf.d/default.conf 配置来开启服务的,它会默认替换其他配置文件里的配置。有时候会发现 /etc/nginx/conf.d 下什么也没有,这时我们可以自己创建一个 default.conf 文件。
自定义default.conf 配置
#这是最基本的开始服务配置,其他可以自行添加,像本地配置一样
server {
#服务启动时监听的端口
listen 3000 default_server;
#服务启动时文件加载的路径
root /home/gitname/www/blog; #后面git自动部署项目文件所放地址
#默认加载的第一个文件
index index.html index.htm index.nginx-debian.html;
#页面访问域名,如果没有域名也可以填写_
server_name localhost;
location / {
#页面加载失败后所跳转的页面
try_files $uri $uri/ =404;
}
}
nginx基本命令(全局)
启动nginx 服务
sudo nginx
重启nginx 服务
# 每次更改好执行一次
sudo nginx -s reload
快速停止nginx 服务
sudo nginx -s stop
正常停止nginx 服务
sudo nginx -s quit
查看nginx是否在运行
sudo -aux | grep nginx
服务器git使用
服务器拉取github代码
安装好git后,如果要在服务器拉取github仓库的代码,我们可以像在自己本机电脑一样配置git
配置个人信息:
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
检查是否有ssh:
$ cd ~/ .ssh
$ ls
> authorized_keys id_rsa id_rsa.pub known_hosts
我们需要寻找一对以 id_dsa 或 id_rsa 命名的文件,其中一个带有 .pub 扩展名。 .pub 文件是公钥,另一个则是与之对应的私钥。 如果找不到这样的文件(或者根本没有 .ssh 目录)就需要自己自己创建ssh。
创建SSH秘钥:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
输入这个命令后里面需要输入的都不用输入,直接回车。完成后注意里面的路径地址就是秘钥文件所在的地址 一般 /root/.ssh 下。
查看公钥:
$ cat ~/.ssh/id_rsa.pub
> ssh-rsa XXXXXXXXXXXX... == Your Email Address
添加公钥:
公钥创建好后就可以把这个公钥添加到github上去,登录自己的GitHub,进入点击 Settings点击 SSH and GPG keys 然后 点击 New SSH key 随便起一个名字,把复制的公钥添加上去,保存OK。
一个GitHub账号可以添加多个公钥。我们可以把我们使用的多台电脑都可以添加上去,添加好后在服务器上就可以大胆的拉取我们github仓库的代码了。
在服务器搭建自己的git服务器
在自己的电脑配置git服务器,就可以像GitHub一样在服务器创建自己的仓库,把代码直接提交到服务器上,这样涉及到一些公司隐私的项目就可以放进来了,并且还能通过这实现自动部署。
1、创建git用户:
sudo adduser gitname # gitname名字
Adding user `gitname' ...Adding new group `gitname' (1006) ...Adding new user `gitname' (1006) with group `gitname' ...Creating home directory `/home/gitname' ...Copying files from `/etc/skel' ...
New password: xxxxxx
Retype new password: xxxxxx
passwd: password updated successfully
Changing the user information for gitname # 后面直接回车
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
可以看到我们的创建的git用户直接保存到 /home 下了。
git用户创建好了,我们需要像上面那样,为我们本机和git服务器做一个连接,把本机的公钥添加到git服务器上,这样每次提交就不需要输入密码了。(如果没有把公钥添加上去,就算在本机连接到了git服务,输入密码时也可能会报错。)
2、为git服务器创建.ssh
$ cd /home/gitname #进入git用户根目录
$ sudo mkdir .ssh #创建.ssh文件
$ sudo touch .ssh/authorized_keys #在.ssh 下创建authorized_keys文件
authorized_keys文件创建好后,就可以把本机的 .pub 公钥复制到 authorized_keys 中了,这其中也可以添加多台机子的公钥。
3、创建仓库
在创建仓库前一定要先切换到当前的git用户,否则后续上传代码时会一直报错无法连接。
$ sudo su gitname #切换git用户
$ cd /home/gitname #进入你的gitname文件
$ mkdir bare # 创建一个文件夹(名字随便)
$ cd bare # 进入
$ git init --bare bare.git #初始化该新的空仓库
> Initialized empty Git repository in /home/gitname/bare/bare.git/
对 git init 命令添加 --bare 参数表示初始化 Git 仓库的时不要创建本地工作目录,相当于以前 .git 文件夹下的所有内容直接创建到当前目录下,而不是被放到 .git 目录下。
现在远程仓库创建好了,git仓库的地址就是 gitname@180.100.xxx.xxx:/home/gitname/bare.git
我们只需要在本机关联git仓库进行操作就行了
git init
git remote add server gitname@180.100.xxx.xxx:/home/gitname/bare/bare.git
git add .
git commit -am "server init"
git push server master
4、实现自动部署
git仓库已经搭建好了,如何实现自动部署呢,使用 Git 钩子,Git 钩子(hooks)是在 Git 仓库中特定事件(certain points)触发后被调用的脚本。通过钩子可以自定义 Git 内部的相关(如 git push)行为,在开发周期中的关键点触发自定义的行为。Git 含有两种类型的钩子:客户端的和服务器端的。客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。
配置git hook
第一种方法:
$ cd /home/gitname/bare/bare.git/hooks #进入bare仓库的hooks文件
$ cp post-update.sample post-update #复制并重命名post-update.sample文件
$ vim post-update #编辑post-update文件,添加执行脚本
post-update内容配置:
下面大概意思是,指定一个目录 /home/gitname/www/blog/,连接gitname/bare.git远程仓库,拉取代码,然后再进行其他一些操作。
#!/bin/sh
unset GIT_DIR
DIR_ONE=/home/gitname/www/blog/ #此目录是自动更新的项目目录,放在gitname下
cd $DIR_ONE
git init
git remote add origin /home/gitname/bare/bare.git #添加远程gitname的仓库
git clean -df
git pull origin master
#拉取代码后进行一些build或者部署操作
# npm i
# npm run build
# pm2 restart xxx #pm2重启项目即可
# sudo nginx -s reload # nginx重启
如果提交代码时提示git仓库已经初始化过了,我们可以再次修改把 git init 和 git remote add origin /home/gitname/bare/bare.git 命令去掉。或者每次提交使用 rm -rf .git 把git仓库清空再重新拉取。
配置好之后修改一下 post-update的权限
$ chmod +x post-update
第二种方法:
直接修改hook文件下的 post-receive 文件,直接拉取代码。
$ cd /home/gitname/bare/bare.git/hooks #进入bare仓库的hooks文件
$ vi post-receive # 编辑post-receive 执行拉取代码
post-receive写入如下内容:
#!/bin/sh
git --work-tree=/home/gitname/www/blog --git-dir=/home/gitname/bare/bare.git checkout -f
配置好之后修改一下 post-update的权限
$ chmod +x post-receive
上面两种方法任意选择一种后,然后再执行最后一步操作
$ exit # 退出当前git用户,切换到root
$ chown -R gitname:gitname /home/gitname/bare/bare.git # 添加权限
git hooks添加好了,在本地仓库添加远程仓库源之后,一旦本地仓库变更提交就会触发 Git 钩子,驱动自动部署。
可能会出现的错误
在本地客户端连接远程git仓库后,push提示报错
kex_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
很多说法是通过ssh登录服务器没有使用 exit 命令进行正确退出,导致连接进程增多,ssh登录进行了限制,无法正确登录,最简单的办法就是重启服务器,要么找出进程一个一个 kill 掉。要么就是增大服务器的连接次数,但几种办法都尝试了,似乎 git 的这个错误和这无关。后来知道可能是没有重启 sshd 或者根本就没有开启。
修改:
vi /etc/hosts.allow
修改为 sshd:ALL 但一般不用修改。
然后重启 sshd
sshd
service sshd restart
解决密码过期问题:
# 查看过期
chage -l root
# 修改过期时间
chage -m 0 root
chage -M 99999 root # 修改后密码永不过期
linux常用命令
sudo 命令是以管理者身份进行操作,有时候没有权限进行操作就需要加上sudo命令来操作。
创建文件夹:
sudo mkdir file
创建文件:
sudo touch test.txt
sudo touch default.conf
列出目录所以文件:
ls -al
删除文件:
rm -rf file # 注意使用
查看当前工作目录路径:
pwd
vim编辑文件:
vi 进入编辑页面,按 i 编辑,编辑好后按 esc 退出编辑,输入 :wq退出,加上 ! 强制退出
链接:45个常用Linux命令
参考链接: