服务器部署过程(node相关)

576 阅读4分钟

服务器部署过程

步骤

  1. 购买自己的域名
  2. 域名备案
  3. 购买服务器
  4. 配置服务器应用环境
  5. 项目远程部署和发布与更新

购买域名

  1. 腾讯云
  2. 阿里云
  3. 百度云
  4. 爱名网
  5. godaddy

云主机

  1. 阿里云 ECS
  2. 亚马逊 AWS
  3. 百度云

备案

  1. 阿里云备案
  2. 备案服务号管理

登录服务器(以阿里云为例子)

连接服务器

ssh root@60.205.231.190

ssh无密码登录

  1. 在自己的电脑上生成私钥和公钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
//-t 指定是rsa算法
//-b 指定公钥和私钥的大小,这里是四个字节,越大安全,性能也就越差
//-C 指定邮箱
//会在~/.ssh目录下面生成id_rsa和id_rsa.pub文件,公钥可以给别人,但是私钥一定不能给别人
  1. ssh加密解密比较慢,客户端可以开启ssh代理,加快速度
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
  1. 服务器配置
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
eval "$(ssh-agent -s)"//开启ssh代理服务,加快解密速度
ssh-add ~/.ssh/id_rsa
  1. 把本地的公钥上传到服务器授权文件中
//1. 在服务器.ssh目录下新建授权文件
vi ~/.ssh/authorized_keys
//2. 将本地的公钥id_rsa.pub文件内容拷贝到服务器授权文件中
  1. 执行完以上步骤,在执行以下ssh登录就不需要密码登录了
ssh root@60.205.231.190

增加ssh连接服务器安全等级

  1. 修改/etc/ssh/sshd_config 这个文件
vi /etc/ssh/sshd_config
// Port 2222 默认ssh的默认端口是22,我们将他改成2222
//PermitRootLogin yes 默认为yes,改为no, 用户就不能以root用户登录了
//PasswordAuthentication yes 默认为yes, 可以密码登录,改为no, 用户就不能以密码登录了,只能以公钥和私钥的形式登录
  1. 重启ssh
systemctl restart sshd.service
  1. 此时再以22端口登录的话就报错了
ssh: connect to host 60.205.231.190 port 22: Connection refused
  1. 正确的登录方式
ssh -p 2222 root@60.205.231.190

安装部署需要的其他软件

yum install wget curl git

安装node

//1. 安装nvm
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
//2. 安装node指定版本
nvm install 8.11.3
//3. 使用指定版本
nvm use 8.11.3
//4. 查看node版本
node -v
//5. 用cnpm替换npm提高下载模块速度
npm i cnpm -g

编写node程序

vi ~/node/demo.js
...
const http = require('http');
const hostname='60.205.231.190';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-type', 'text/plain');
  res.end('hello world');
})

server.listen(port, hostname, ()=>{
  console.log(`Server running at http://${hostname}:${port}`);
})
...
node demo.js
//地址栏输入http://60.205.231.190:3000/程序既可跑起来了

安装pm2

//全局安装
npm install pm2 -g
//启动一个项目
pm2 start app.js --name 'demo'
//查看这个项目的详细信息
pm2 show demo
//删除该项目
pm2 delete demo
//查看pm2当前启动的项目
pm2 list

安装nginx 参考更多nginx

  1. 安装
//安装nginx依赖环境
yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
cd ~ && mkdir source && cd source
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
//生成makefile文件
./configure
make && make install
  1. 将nginx添加到环境变量
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

ps: 上面语法是为nginx创建一个软连接, 具体语法是ln -s 源文件 目标文件,要写成绝对路径

  1. nginx 相关命令
//启动
nginx 
//检查nginx配置是否错误
nginx -t
//重启nginx
nginx -s reload
//关闭nginx
nginx -s stop

安装mysql

cd ~/source
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
yum repolist all | grep mysql
sudo yum install mysql-community-server -y
//开启mysql服务
sudo systemctl start mysqld.service
//查看mysql服务状态
sudo systemctl status mysqld.service
//查看mysql临时登录密码
sudo grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p + 临时的密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin!888';
//开启远程连接
use mysql;
select Host, User from user;
//第一个root表示用户名,%表示所有的电脑都可以连接,也可以设置某个ip地址运行连接,BY后面的字符串表示密码).表示任何数据库都可以被访问 %表示任意的ip都可以访问,这句话的意思表示允许数据库被任何主机以root用户以Credan!888(远程连接的密码,不是本地访问的密码)密码进行访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Admin!888' WITH GRANT OPTION;
//刷新授权
flush privileges;

安装mongod

安装

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz 
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz  
mv  mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb 
//添加到环境变量,加入到~/.bash_profile文件里面
export PATH=/usr/local/mongodb/bin:$PATH 
source ~/.bash_profile 
mkdir -p /data/db

以守护进程的方式运行

  1. 在/usr/local/mongodb下面新建mongod.conf
port= 27017
fork=true
master=true
logpath=/data/mongo/27017/mongo.log
logappend=true
dbpath=/data/db
#auth=true #是否开启授权

ps: 一定要提前把所需要的文件建好 2. 执行mongod -f /usr/local/mongodb/mongod.conf运行

设置密码

  1. show dbs 新版Mongodb没有admin数据库,但是不妨碍下面的操作
  2. use admin 进入admin数据库
  3. db.createUser({user:"admin", pwd:"admin888", roles:[{role:"userAdminAnyDatabase", db:"admin"}]})
    • 改命令是创建是管理员账号
    • mongodb中的身份是基于roles的, user是用户名,pwd是用户民对应的密码,userAdminAnyDatabase表示该用户可以操作任何数据库
  4. db.auth("credan", "Credan!88") 验证用户是否添加成功,返回1表示添加成功
  5. 修改上面mongod.conf配置文件 将auth=true打开,并且重启mongod
  6. 用上面创建好的admin账号,创建其他账号
    • use admin
    • db.auth("admin", "admin888")
    • use yourdatabase
    • db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })
  7. 本地通过robo 3T 链接服务器mongo
    image.png