1. 服务器部署步骤
ssh root@103.45.172.152
The authenticity of host '103.45.172.152 (103.45.172.152)' can't be established.ECDSA key fingerprint is SHA256:94hLvsp4mK8mv4abQaLVLMphZ3LctTAJEO1LXERMzFw.Are you sure you want to continue connecting (yes/no)? y// 这里的意思是说这个主机的认证没有建立,不认识这个签名,你是否想连接这个服务器,选择yesPlease type 'yes' or 'no': yes// 把这个ip地址加入到已知组里面了Warning: Permanently added '103.45.172.152' (ECDSA) to the list of known hosts.// 这里需要输入公网地址对应的密码root@103.45.172.152's password:// 登录成功提示Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-87-generic x86_64)* Documentation: https://help.ubuntu.com* Management: https://landscape.canonical.com* Support: https://ubuntu.com/advantage0 个可升级软件包。0 个安全更新。Last login: Mon Feb 26 12:59:07 2018 from 111.67.201.161
2.2创建用户
root用户权限太大,如果直接操作,操作错误服务器就崩掉了,所有创建一个普通用户
adduser zhangyong
root@ubuntu:~# adduser zhangyong// 创建一个用户Adding user `zhangyong' ...// 把用户添加到新的用户组里Adding new group `zhangyong' (1001) ...Adding new user `zhangyong' (1001) with group `zhangyong' ...// 创建了一个加目录Creating home directory `/home/zhangyong' ...Copying files from `/etc/skel' ...Enter new UNIX password:zhangyongRetype new UNIX password:zhangyongpasswd: password updated successfullyChanging the user information for zhangyongEnter the new value, or press ENTER for the defaultFull Name []:Room Number []:Work Phone []:Home Phone []:Other []:Is the information correct? [Y/n] y
切换用户
su zhangyong
2.3赋予权限
- gpasswd命令是Linux下工作组文件/etc/group和/etc/gshadow管理工具。
- -a: 添加用户到组
- -d: 从组删除用户
gpasswd -a zhufeng sudo
root@ubuntu:/home/zhangyong# gpasswd -a zhangyong sudo// 把用户添加到sudo用户组里Adding user zhangyong to group sudo
2.4 添加用户权限
- Linux用户配置sudo权限visudo,如果你用visudo来编辑这个文件,那么它会帮你自动做很多事情,比如说语法检查,加锁防止别人同时修改这个文件等等
sudo visudovi /etc/sudoers
修改# User privilege specification下面添加一行
# User privilege specificationroot ALL=(ALL:ALL) ALLzhangyong ALL=(ALL:ALL) ALL
- 1 “From ALL hosts”, zhufeng 从任何机器登录,都可以应用接下来的规则
- 2 “Run As ALL User”, zhufeng”可以以任何用户的身份运行一些命令
- 3 “Run As All Groups”, zhufeng”可以以任何用户组的身份运行一些命令
- 4 前面的规定适用于任何命令
zhufeng这个用户可以从任何机器登录,以任何用户和用户组的身份运行任何命令。 保存并退出
2.5SSH无密码登录
ssh 公钥认证是ssh认证的方式之一。通过公钥认证可实现ssh免密码登陆,git的ssh方式也是通过公钥进行认证的。
2.5.1 本地生成公钥和私钥
ssh-keygen --helpcd ~/.sshssh-keygen -t rsa -b 4096
- t 指定加密方式
- -b 字节数
// 创建私有公有秘钥Generating public/private rsa key pair.// 秘钥保存文件路径Enter file in which to save the key (C:\Users\Administrator/.ssh/id_rsa):C:\Users\Administrator/.ssh/id_rsa already exists.Overwrite (y/n)? yEnter passphrase (empty for no passphrase):Enter same passphrase again:// 私钥的生成地址Your identification has been saved in C:\Users\Administrator/.ssh/id_rsa.// 公钥的生成地址Your public key has been saved in C:\Users\Administrator/.ssh/id_rsa.pub.The key fingerprint is:SHA256:Zj+dJZtToyUoS7e13ujiLpo/pMhBiK4KfwRD7t8KnfQ administrator@SKY-20190113LCNThe key's randomart image is:+---[RSA 4096]----+| || . || + . ||. = . . ||.. +. S o + = || ..ooo +.= + % . ||o .+o+Eo. + O ||o. .= o.o .o + ||o ....oo.=oo+ . |+----[SHA256]-----+
2.5.2 开启ssh代理
可以提高秘钥加密解密速度
eval "$(ssh-agent -s)"ssh-add ~/.ssh/id_rsa
2.5.3 服务器配置
ssh-keygen -t rsa -b 4096eval "$(ssh-agent -s)"ssh-add ~/.ssh/id_rsa
2.5.4 把本地的公钥上传到服务器授权文件中
vi ~/.ssh/authorized_keys// 把权限改成600chmod 600 ~/.ssh/authorized_keysservice ssh restart
用vim打开authorized_keys,将本地的公钥复制进去
cat ~/.ssh/id_rsa.pub
2.6 安装软件
//升级服务器apt-get update// 安装下载工具apt-get install wget curl git -y
2.7安装node
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash. /root/.bashrcnvm install stablenode -vnpm i cnpm -gnpm i nrm -g
- 如果安装nvm失败,可以使用git方式安装
2.8 编写node程序
var http = require('http');const hostname = '127.0.0.1';const port = 3000;const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Hello World\n');});server.listen(port, () => {console.log(`Server running at http://${hostname}:${port}/`);});
2.9 启动程序
强大的进程管理器,进程异常退出时pm2会尝试重启
cnpm install pm2 -g
用pm2启动node
| 命令 | 用途 |
|---|---|
| pm2 start blog.js —name “blog” | 启动应用 |
| pm2 list | 查看所有应用 |
| pm2 restart crawl | 重启应用 |
| pm2 stop crawl | 停止应用 |
| pm2 delete crawl | 删除应用 |
pm2 start blog.js --name "blog"
查看服务器进程
// 列出当前引用进程 | 过滤 node进程ps -ef | grep node
杀死进程
kill -9 20984
2.10 nginx
Nginx是一个高性能的HTTP和反向代理服务器
2.10.1 安装
apt-get install nginx -y
2.10.2 nginx命令
| 名称 | 命令 |
|---|---|
| 启动nginx | nginx -c /etc/nginx/nginx.conf |
| 关闭nginx | nginx -s stop |
| 重读配置文件 | nginx -s reload / kill -HUP nginx |
| 常用命令 | service nginx{start stop status restart reload configtest } |
2.10.3 nginx配置
cd /etc/nginx/sites-enabledvi blog.conf
//上游upstream blog {server 127.0.0.1:3000;server 127.0.0.1:4000;}server {listen 80;// 服务名字可以配置多个server_name 103.45.172.152 www.zhangyufan.tk;location / {// 这里的blog对应上游的名字proxy_pass http://blog;}}
2.10.4 重启nginx
nginx -s reload
3. Docker 是什么
- Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
3.1 docker安装
- docker分为企业版(EE)和社区版(CE)
- docker-ce
- hub.docker
3.2 安装
yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli containerd.io
3.3 启动
systemctl start docker
3.4 docker命令
// 查看docker版本信息$ docker version$ docker info// 查看本地镜像docker image ls// 查看docker 容器列表docker container ls -a// 删除运行中的容器,对应的IDdocker container rm ba4b12dd04dd 44d146e7f534// 拉取docker镜像到本地docker pull node
3.5 卸载
docker infoyum remove dockerrm -rf /var/lib/docker
3.6 Docker架构
3.7 阿里云加速
mkdir -p /etc/dockertee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"]}EOF# 重载所有修改过的配置文件systemctl daemon-reloadsystemctl restart docker
启动服务
docker run ubuntu /bin/echo "Hello world"
- docker: Docker 的二进制执行文件
- run:与前面的 docker 组合来运行一个容器
- ubuntu指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像
- /bin/echo “Hello world”: 在启动的容器里执行的命令
3.8 启动node服务
3.8.1 Dockerfile
FROM nodeCOPY ./app /appWORKDIR /appRUN npm installEXPOSE 3000
- FROM 表示该镜像继承的镜像 :表示标签
- COPY 是将当前目录下的app目录下面的文件都拷贝到image里的/app目录中
- WORKDIR 指定工作路径,类似于执行 cd 命令
- RUN npm install 在/app目录下安装依赖,安装后的依赖也会打包到image目录中
- EXPOSE 暴露3000端口,允许外部连接这个端口
3.8.2 创建image
docker build -t zhufengblog .
- -t用来指定image镜像的名称,后面还可以加冒号指定标签,如果不指定默认就是latest
- . 表示Dockerfile文件的所有路径,.就表示当前路径
3.8.3 使用新的镜像运行容器
// -p 端口映射docker container run -p 3333:3000 -it zhufengblog /bin/bashnpm start
- -p 参数是将容器的3000端口映射为本机的3333端口
- -it 参数是将容器的shell容器映射为当前的shell,在本机容器中执行的命令都会发送到容器当中执行
- zhufengblog image的名称
- /bin/bash 容器启动后执行的第一个命令,这里是启动了bash容器以便执行脚本
3.8.4 CMD
Dockerfile
+ CMD npm start
重新制作镜像
docker build -t zhufengblog .
- RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件
- CMD命令则是在容器启动后执行
- 一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令
- 指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令
重新启动服务
docker container run -p 3333:3000 zhangyongblog
这样之后会一直卡在容器里执行,无法退出,所以要使用下面的方式执行
// -d 守护进程,后台运行docker container run -d -p 3333:3000 zhangyongblog
