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
// 这里的意思是说这个主机的认证没有建立,不认识这个签名,你是否想连接这个服务器,选择yes
Please 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/advantage
0 个可升级软件包。
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:zhangyong
Retype new UNIX password:zhangyong
passwd: password updated successfully
Changing the user information for zhangyong
Enter the new value, or press ENTER for the default
Full 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 visudo
vi /etc/sudoers
修改# User privilege specification
下面添加一行
# User privilege specification
root ALL=(ALL:ALL) ALL
zhangyong 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 --help
cd ~/.ssh
ssh-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)? y
Enter 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-20190113LCN
The 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 4096
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
2.5.4 把本地的公钥上传到服务器授权文件中
vi ~/.ssh/authorized_keys
// 把权限改成600
chmod 600 ~/.ssh/authorized_keys
service 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/.bashrc
nvm install stable
node -v
npm i cnpm -g
npm 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-enabled
vi 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 lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum 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
// 删除运行中的容器,对应的ID
docker container rm ba4b12dd04dd 44d146e7f534
// 拉取docker镜像到本地
docker pull node
3.5 卸载
docker info
yum remove docker
rm -rf /var/lib/docker
3.6 Docker架构
3.7 阿里云加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"]
}
EOF
# 重载所有修改过的配置文件
systemctl daemon-reload
systemctl 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 node
COPY ./app /app
WORKDIR /app
RUN npm install
EXPOSE 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/bash
npm 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