前言
网站的部署或移植是一套固定流程,所以我们可以根据固定的步骤来部署。
我们知道网站就三样东西组成,nginx、wordpress和mysql,也就是说我们只要部署这三个东西就行。
有两样好东西可以非常方便管理以上三个东西,分别是git和docker。
git的好处在于方便管理网站源码和配置文件,当本地修改配置后可以方便同步发哦服务器。
docker的好处在于把网站的三个东西打包起来,随时能部署。
步骤一 安装git、docker、docker-compose
{% post_link linux安装git %}
{% post_link linux安装docker %}
{% post_link linux安装docker-compose %}
步骤二 服务器搭建git仓库
1. 创建git用户
我们要在服务器搭建一个git裸仓库用来和本地关联,这样就能方便的在本地和服务器之间传递配置。git裸仓库类似于我们平时用的github和码云。
同时我们还应该设定一个只有git权限的用户,该用户只能使用git相关操作。这是为了安全考虑,假如我们直接用root用户远程操作git仓库,那么一旦别人破解root密码就能完全操控服务器。
同时为了同步docker容器内的uid和gid,所以我们规定所有容器包括git的通用uid和gid都是9876。
#创建git用户,同时会创建git用户组
useradd git
#修改git用户组gid
groupmod -g 9876 git
#修改git用户的uid
usermod -u 9876 git
#修设置git用户密码
passwd git
2. 搭建git仓库
mkdir /home/git/meizdao.git
git init --bare /home/git/meizdao.git
#把仓库的拥有者设为git用户
chown -R git:git meizdao.git
步骤三 建立服务器端git仓库映射文件夹
我们在本地使用git命令推送内容到服务器git仓库后,需要git在接收到我们推送的最新内容后,自动把最新内容更新到某个文件夹。这就要了解git的两个知识点。
首先git是可以分离git仓库和映射文件夹的。也就是说git仓库的位置不用变,比如说/home/git/meizdao.git
仓库位置不用变,但是从这个位置拉出来的文件位置可以随意。
其次git内部设置了一系列事件,就好比javascript的事件驱动一样,当某个事件发生的时候,就会触发某些动作,所以我们可以设置post-update
事件,当仓库内容更新时检出最新内容到映射文件夹。
1. 创建映射文件夹
mkdir /usr/local/meizdao
chown -R git:git /usr/local/meizdao
2. 设置事件文件post-update
#找到post-update事件模板
cd /home/git/meizdao.git/hooks
cp post-update.sample post-update
把下面代码拷贝到事件文件中
#!/bin/sh
git --work-tree=/usr/local/meizdao --git-dir=/home/git/meizdao.git checkout -f
#这个文件夹用来存放定时任务执行的脚本
chmod -R 777 /usr/local/meizdao/script
exec git update-server-info
步骤四 把本地源码和配置上传到服务器
1. 在本地关联远程仓库
git remote add origin git@meizdao.com:/home/git/meizdao.git
git push -uf origin master
2. 启动服务器
docker-compose -f /usr/local/meizdao/docker-compose/docker-compose.yml up -d --build
步骤五 设置linux安全
linux的基本安全设置:
- 禁用root账户登陆,指定某个特定的用户登陆
- 修改ssh登陆端口
- 开启firewalld防火墙
linux高级安全设置:
- 定期监控sshd登陆日志,发现不寻常的登陆ip则拉入黑名单
步骤六 设置数据库自动备份定时任务
crontab+git+github三个东西相结合,就能定时备份数据库到github。
1. 创建备份文件夹
mkdir /usr/local/meizdao/backup
#这个文件夹权限和script文件夹权限一样,要全部放开,因为root用户会来操作
chmod -R 777 /usr/local/meizdao/backup
2. 把该文件夹关联github仓库
因为第一次推送到远程仓库时需要对两个仓库进行关联, 所以第一次我们自己弄个文件进行推送(我脚本里执行的是git push
命令, 但第一次推送要执行git -uf push origin master
)
git init
git remote add origin <github仓库>
touch 1.txt
git add . && git commit -m'1'
git -uf push origin master
3. 设置定时任务
crontab -e
把下面命令写入定时任务中,意思是每天凌晨3点去执行script文件夹中的mysqldump.sh脚本
0 3 * * * /usr/local//script/mysqldump.sh
总结
根据以上步骤就能快速部署一个网站, 并且实现定时备份数据库的功能。