1. 简介

接下来,我们将代码从 Git 仓库手动部署到服务器上。步骤如下:

  1. 创建用于部署的 deployer 用户;
  2. 设置用户及目录权限;
  3. 添加 SSH 公钥到 Git 仓库,以实现免密拉取代码;
  4. 部署代码,调整细节。

2. 操作

2.1 新建用户

出于安全考虑,一般情况下我们不会直接使用 root 用户执行操作,而是用其他用户。

首先,我们创建一个 deployer 用户来完成代码部署相关的任务。

useradd deployer

然后为 deployer 开启密钥登录(这里直接使用 root 用户的密钥,也可以另外生成):

mkdir -p /home/deployer/.ssh
cp /root/.ssh/authorized_keys /home/deployer/.ssh/authorized_keys
chown -R deployer:deployer /home/deployer

这样就可以使用密钥登录了。

2.2 设置用户及目录权限

用户权限

修改 shell:

chsh -s /bin/bash deployer

将 deployer 添加到 Nginx 所在的 www 组:

usermod -aG www deployer

将 deployer 添加到 sudoers 中:

vim /etc/sudoers

在最后加入:

deployer ALL=(ALL) NOPASSWD: ALL

保存并退出。

目录权限

接下来配置 web 目录权限。

设置根目录 /home/wwwroot 的用户为 deployer,用户组为 www:

chown deployer:www /home/wwwroot # 最后这里不要加斜线

使 deployer 在 /home/wwwroot 下创建的文件与目录权限继承根目录设定(用户 deployer,用户组 www):

chmod g+s /home/wwwroot

2.3 免密访问 Git 仓库

我们使用 deployer 用户来完成代码部署相关的任务,因此这里要为 deployer 用户生成密钥。

切换到 deployer 用户:

su - deployer

生成密钥对:

ssh-keygen -C deployer

获取公钥:

cat /home/deployer/.ssh/id_rsa.pub

然后在 Gitee 添加部署公钥(即只有读权限):
图片标题

2.4 部署代码

拉取代码:

git clone git@gitee.com:ilaoniu/example example.ilaoniu.cn

最后,调整下细节,例如修改 .env 文件,配置数据库等环境变量。

传输文件可以使用 scp 命令:

# 复制文件
scp local_file remote_username@remote_ip:remote_folder
scp local_file remote_username@remote_ip:remote_file

# 复制目录
scp -r local_folder remote_username@remote_ip:remote_folder

# 从远处复制到本地只需要交换 local 和 remote 两部分