系统版本:ubuntu~16.04.10
初始安装操作
- 环境配置完毕,部署基本完成
- 如果环境不一致?重复部署?由Docker来解决
更新
# 更新
sudo apt-get update
基本工具安装
# 基本工具安装
sudo apt-get install vim openssl build-essential libssl-dev wget curl git
nvm 安装
如果全部由Docker管理,可以跳过安装
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.4/install.sh | bash
# 查看(如果无法查看先退出再重新登入)
# 版本
nvm --version
# 远程仓库版本
nvm ls-remote
# 查看所有版本
nvm ls
# 安装版本
nvm install v12.13.1
# 使用此版本
nvm use v12.13.1
# 查看node与npm版本
node --version
npm --version
sudo node --version,sudo npm --version
sudo: npm: command not found
sudo: node: command not found
解决方式,软连接
which node
# /root/.nvm/versions/node/v12.13.1/bin/node
which npm
# /root/.nvm/versions/node/v12.13.1/bin/npm
sudo ln -s "/root/.nvm/versions/node/v12.13.1/bin/node" "/usr/local/bin/node"
sudo ln -s "/root/.nvm/versions/node/v12.13.1/bin/npm" "/usr/local/bin/npm"
# 再次查看即可正确返回
sudo npm --version
# 如果切换node版本,要先删除/usr/local/bin/node,/usr/local/bin/npm
rm -rf /usr/local/bin/node
rm -rf /usr/local/bin/npm
# 再执行上面的软连接
yarn 安装
如果全部由Docker管理,可以跳过安装
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
sudo sh -c 'echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list.d/yarn.list'
sudo apt update
sudo apt install yarn
# 查看yarn
yarn --version
# 移除yarn及其依赖
sudo apt purge yarn
# 删除yarn源
sudo rm /etc/apt/sources.list.d/yarn.list
安装 pm2
如果全部由Docker管理,可以跳过安装
# npm
# npm --registry=https://registry.npm.taobao.org install -g pm2
# yarn
# yarn config set registry https://registry.npm.taobao.org
yarn global add pm2
# 查看版本
pm2 --version
nginx 安装&配置文件编写
nginx 默认 80 端口,负责端口转发
# 更新
sudo apt-get update
# 安装 nginx
sudo apt-get install nginx
# 根据业务编写nginx.conf
cd /etc/nginx/conf.d/
vi test.conf
# 以下为nginx常用命令
# 检测nginx文件
nginx -t
# 启动nginx服务
systemctl start nginx.service
# 停止nginx服务
systemctl stop nginx.service
# 重启nginx服务
systemctl restart nginx.service
# 重新读取nginx配置(这个最常用, 不用停止nginx服务就能使修改的配置生效)
systemctl reload nginx.service
config 修改
# 优化
# 隐藏版本号`Response Headers` -> `Server: nginx/1.10.3 (Ubuntu)` -> `Server: nginx`
# vi /etc/nginx/nginx.conf # 去掉注释
server_tokens off;
mongodb 安装与配置
如果全部由Docker管理,可以跳过安装
mongodb 安装
从 Ubuntu Repository 安装 MongoDB
# 更新
sudo apt update && sudo apt upgrade -y
# 安装
sudo apt install mongodb
# 查看状态
systemctl status mongodb
# mongodb配置文件查看
# mongodb.service - An object/document-oriented database
# Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
# Active: active (running) since Mon 2019-12-02 16:06:36 CST; 18s ago
# Docs: man:mongod(1)
# Main PID: 32418 (mongod)
# CGroup: /system.slice/mongodb.service
# └─32418 /usr/bin/mongod --config /etc/mongodb.conf
cat /etc/mongodb.conf
# 可知道默认数据和log存放地址,方便日后定时清理日志
# # Where to store the data.
# dbpath=/var/lib/mongodb
# #where to log
# logpath=/var/log/mongodb/mongodb.log
# mongodb常用命令如下
systemctl status mongodb
systemctl stop mongodb
systemctl start mongodb
systemctl restart mongodb
# 卸载MongoDB
systemctl stop mongodb
apt purge mongodb
apt autoremove
# 彻底卸载删除mongodb
# 尝试使用 dpkg 搜索已经安装的mongo软件包
sudo dpkg -l | grep mongo
# remove
sudo apt-get remove mongodb* --purge
# 删除数据库和日志文件
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
默认配置修改
需要 robot3T 远程连接
# 修改mongodb配置文件
systemctl status mongodb # 查看状态
vi /etc/mongodb.conf # 修改配置
# 端口和ip修改
# 127.0.0.1=>0.0.0.0
# port=>27017
mongodb 配置
基本的安全意识是要有的
mongodb
默认监听端口 27017
,人尽皆知,所以很不安全,容易被勒索,基本的防护措施我们还是需要处理的
设置用户名密码和数据库的访问权限
# 创建超级管理员
mongo # 进入mongo shell
show dbs # 显示所有数据库
use admin # 进入admin数据库
# 创建一个用户,身份是超级管理员
db.createUser({user:"root",pwd:"123456",roles:[{role:'root',db:'admin'}]})
# 退出mongo shell 再次进入,权限测试,返回1说明登录成功
use admin
db.auth("root","123456")
# 为别的数据库创建用户
use admin
# 创建用户,用户 wang 对数据库test的权限为读写
db.createUser({user:"wang",pwd:"123456",roles:[{ role: "readWrite", db: "test" }]})
# auth认证
db.auth("test-user","123456")
# 操作对应数据库
use test
db.test.save({name:'老王',age:18})
# 查看所有用户
use admin
db.system.users.find({})
默认情况下 MongoDB 是不开启用户认证的。如果我们添加用户,那么需要开启用户认证机制。通过修改 mongodb.conf 配置文件(/etc/mongodb.conf
),在文件中解开 auth=true
即可
# bind_ip = 127.0.0.1
# 远程访问
bind_ip = 0.0.0.0
port = 27017
# Turn on/off security. Off is currently the default
# noauth = true
auth = true
然后重启 MongoDB 服务
# 进入mongodb shell
mongo
show dbs # 会报错,因为权限已设置
# 登录认证=> db.auth('user','pwd')
use admin
# 返回 1 说明认证成功
db.auth('root','123456')
Robo3T 访问
此类工具填写账户名和密码可连接访问
注意防火墙或安全组已经打开(27017 端口),且 ip 修改为(0.0.0.0)
以上就完成了基本环境搭建,如果你想用Docker,接着往下走
docker 安装
如果全部以 Docker 方式部署应用
node, mongo, pm2
等都可不必安装
- 更新系统软件
sudo apt-get update
- 安装依赖包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
- 添加官方密钥
# 添加 Docker 官方的 GPG 密钥(为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥) curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 网络问题可以使用国内镜像 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
- 添加仓库
# 设置稳定版本的apt仓库地址 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 国内地址 sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
- 再次更新软件
sudo apt-get update
- 安装 docker
# 具体版本安装 sudo apt-get install docker-ce=<VERSION> sudo apt-get install docker-ce
- 查看 docker 版本
docker --version
- 加速器
由于镜像服务可能出现宕机,建议同时配置多个镜像
# 修改配置文件的方法,配置文件如果不存在则新建 vi /etc/docker/daemon.json # 写入如下内容 { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com", "https://dockerhub.azk8s.cn", "https://reg-mirror.qiniu.com" ] }
- 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
docker 常用命令
# 设置开机启动
sudo systemctl enable docker
sudo systemctl start docker
# 查看docker服务是否启动
systemctl status docker
# 启动docker服务
sudo systemctl start docker
# 关闭docker服务
sudo systemctl stop docker
# 查看容器启动列表
docker ps -a
# 查看容器列表
docker images -a
# 查看默认配置
cat /etc/systemd/system/multi-user.target.wants/docker.service
# 运行状态查看 docker stats
docker stats -a
至此就可以用docker管理应用了
但是很明显的弊端就是手动管理不宜构建不易维护,此时docker-compose
又可以助你一臂之力
docker-compose 安装
是一个快速编排Docker服务的工具
- 下载 docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- 授权
sudo chmod +x /usr/local/bin/docker-compose
- 查看版本信息
docker-compose --version
- 安装 docker composer 自动补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
部署
基本环境搭建完成,Centos 与 Ubuntu 部署方式基本一致
关键点
- nginx 反向代理与负载均衡
- webhook 自动部署(github,gitee)
- mongodb 数据库导入导出以及定时打包备份并同步到七牛云存储
- pm2 进程管理
- SSL 证书,以及脚本自动更新 SSL 证书,如何做到一次部署永久 https
具体细节如下
- 传统部署方式参考
- Docker 部署两种方案
- Docker(复杂难以管理)
- docker-compose(推荐:简便方便管理)
思考以下几个问题
- 如果容器没有定义在同一个docker-compose.yml文件中,它们之间如何链接?
- 如果有手动
run
起的镜像,也有docker-compose up
起的镜像,它们之间又如何链接? - 自动化部署,自动部署脚本编写是否有必要每次都重新构建镜像(毕竟每次
build
耗时较长)?