在centos7开启SSH服务
1、查看是否已安装了SSH服务
# rpm -qa | grep ssh
该系统中没有安装SSH服务
2、安装SSH服务
# yum install openssh-server
安装成功
3、启动SSH服务
1)、修改配置文件
# vi /etc/ssh/sshd_config
esc+:wq 保存退出
2)、启动服务
# /bin/systemctl start sshd.service (该命令没有回显说明成功了)
3)、在docker会提示错误:Failed to get D-Bus connection: Operation not permitted
报这个错的原因是dbus-daemon没能启动。systemctl并不是不能使用。将CMD或者entrypoint设置为/usr/sbin/init即可。docker容器会自动将dbus等服务启动起来。
a)、退出docker
b)、重新创建容器
docker run -d -it --privileged aipeli/node:v1 /usr/sbin/init
在创建容器时一定要把端口映射带!
docker run -d -it -p 3000:3000 --privileged aipeli/node:v1 /usr/sbin/initc)、进入容器
docker exec -it 91 /bin/bash
4、查看Openssl-server版本号
# sshd -v
5、生成公钥
1)、进行 cd ~/.ssh,如果不存在,说明没有创建公钥
2)、生成公钥、私钥
# ssh-keygen -t rsa -C "xxx@163.com"
3)、查看公钥
# cat ~/.ssh/id_rsa.pub
6、将公钥拷贝到gitee里配置
1)、先创建一个仓库
2)、在这个仓库里增加公钥
7、在docker可centos服务器上时行测试
# ssh -T git@gitee.com
1)、在docker里黙认没有ssh客户端工具
# yum install openssh-clients
2)、继续进行测试(3次回车)
3)、测试成功
4)、在docker中创建存放代码的目录,如:/www
5)、在www目录中git clone 仓库,一定要用ssh协议,如果仓库为私有时需要输入用户名密码
# git clone git@gitee.com:aipeli/webhook.git
6)、查看远程仓库连接,进入/www/webhook目录(/www目录应该从宿主机上挂载,数据与容器分离更于自动化布署)
如果要挂载目录,创建容器的命令则改为:
# docker run -d -it -p 3000:3000 -v /wwwroot:/www --privileged aipeli/node:v1 /usr/sbin/init
/wwwroot:为宿主的目录
/www:为docker容器的目录
# git remote -v
到这里,gitee仓库、SSH配置、docker的目录结构配置完成了!
8、在docker /opt目录中布署文件
1)、创建目录 mkdir webhook
# npm init
# npm install gitee-webhook-handler --save
2)、修改package.json
"start": "node index.js"
3)、创建deploy.sh文件
#! /bin/bash git reset --hard origin/master git clean -f git pull origin master npm install npm run test npm run start
4)、创建index.js文件
var http = require('http') var createHandler = require('gitee-webhook-handler') var handler = createHandler({ path: '/webhooks_push', secret: '123456' })# post 所需要用到的秘钥 function run_cmd(cmd, args, callback) { var spawn = require('child_process').spawn; var child = spawn(cmd, args); var resp = ""; child.stdout.on('data', function(buffer) { resp += buffer.toString(); }); child.stdout.on('end', function() { callback (resp) }); } handler.on('error', function (err) { console.error('Error:', err.message) }) handler.on('Push Hook', function (event) { # 这个地方就是GitHub 和 Gitee 不一样的地方,需要注意 console.log('Received a push event for %s to %s', event.payload.repository.name, event.payload.ref); run_cmd('sh', ['./deploy.sh'], function(text){ console.log(text) });# 需要执行的脚本位置 }) try { http.createServer(function (req, res) { handler(req, res, function (err) { res.statusCode = 404 res.end('no such location') }) }).listen(3000) # 服务监听的端口,可以自行修改 }catch(err){ console.error('Error:', err.message) }
5)、运行node index.js
9、配置nginx端口转发
1)、查看docker端口状态,docker ps
2)、在/www/server/panel/vhost/nginx下创建webhook.aipeli.com.conf配置文件
server
{
listen 80 default_server;
server_name webhook.aipeli.com;
location / {
proxy_pass http://172.17.0.2:3000;
}
}
3)、在宝塔控制面板上打开3000端口(很重要!!!)
查看端口是否开启
5、映射端口到docker