接下来,我们将代码从 Git 仓库手动部署到服务器上。步骤如下:
创建用于部署的 deployer 用户;
设置用户及目录权限;
添加 SSH 公钥到 Git 仓库,以实现免密拉取代码;
部署代码,调整细节。
出于安全考虑,一般情况下我们不会直接使用 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
这样就可以使用密钥登录了。
修改 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
我们使用 deployer 用户来完成代码部署相关的任务,因此这里要为 deployer 用户生成密钥。
切换到 deployer 用户:
su - deployer
生成密钥对:
ssh-keygen -C deployer
获取公钥:
cat /home/deployer/.ssh/id_rsa.pub
然后在 Gitee 添加部署公钥(即只有读权限):
拉取代码:
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 两部分
如果要设置权限可以按如下操作:
# 为指定目录下的所有目录设置权限
find /path/to/directory -type d -exec chmod 755 {} \;
# 为指定目录下的所有文件设置权限
find /path/to/directory -type f -exec chmod 644 {} \;
find /path/to/directory
:在 /path/to/directory
目录下查找;
-type d
:只查找目录,-type f
:只查找文件;
-exec chmod 755 {} \;
:对每个找到的目录执行 chmod 755
命令。