资讯专栏INFORMATION COLUMN

ubuntu 下部署 node 服务器环境 - 基础篇

isaced / 1652人阅读

写在最前

这是根据 imooc 上 Scott 老师的课程整理的,主要是方便自己查找,因为真的记不住...
附上链接:Node.js项目线上服务器部署与发布 静态网站,需要数据库的电影网站、公众号,小程序,app 五种项目的部署。
这里只写最简单的静态网站的部署

部署思路

1、完成项目
2、购买域名,备案,解析一些二级域名出来备用
3、购买服务器
4、ssh 远程登录服务器 并进行一些安全配置
5、服务端搭建 node 环境
6、Nginx 反向代理。持有80端口,负责端口转发
7、配置 数据库 mongodb... 安装教程
8、部署上线。本地和服务器上都安装git、pm2(pm2 负责把git的项目更新到服务器)

远程登录服务器 1、第一次 ssh 远程登录

腾讯的超级管理员账户是 ubuntu ,阿里的是 root

ssh root@公网ip

2、委派一个钦差大臣Jerry,避免用超级管理员账号进行直接操作

添加用户 Jerry sudo adduser Jerry

给 Jerry 升官。sudo visudo 打开 GUN nano 配置文件, 在 User privilege specification 下添加 Jerry ALL=(ALL:ALL) ALL
对所有sudo生效;Jerry 可以以任何命令来执行操作;Jerry 可以以任何组来执行操作;这个规则适用于所有命令

重启 ssh 服务:service ssh restart。 然后就可以用 Jerry 登录啦(新开一个命令行,以免登录失败无后路可退): ssh Jerry@外网IP

3、ssh 免密登录

本地生成公钥、私钥

密钥存放在本地 .ssh 文件下, 如果没有先创建一下 mkdir .ssh。如果文件夹和密钥都已经存在,可以先备份一下已存在的密钥 mv id_rsa id_rsa_backup
在 .ssh 目录下做如下操作 : 注册 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ,开启代理 eval "$(ssh-agent -s)", 加入代理 ssh-add ~/.ssh/id_rsa

服务端生成 并把本地的公钥放在服务端的 authorized_keys
使用 Jerry 登录服务端,在 /home/Jerry/.ssh 目录下也进行如上操作生成密钥。接着创建授权文件 vi authorized_keys, vi 是 vim 的缩写,把想要免密登录服务器的电脑的公钥 ip_rsa.pub 复制过来

服务端授权 chmod 600 authorized_keys 并重启ssh 服务 service ssh restart 。 这样就可以通过 Jerry 免密登录了, 通过 root 依然需要密码

一个报错 
Host key verification failed
原因:
本地 .ssh 文件夹下存在另一个文件 known_hosts, 这里记录的是所有访问过的计算机(服务器是台远程计算机)的公钥,报错的公钥有问题
解决办法:
清除对应的公钥信息。 最粗暴的办法是直接删除文件 rm -rf known_hosts , 正确的公钥也会被删掉。含蓄一点就是打开文件找到公钥删掉它。 还有一种办法 ssh-keygen -r 公网IP,可惜报错了 no keys found
提升安全等级 1、修改服务器默认登录端口号

打开配置文件 sudo vi /etc/ssh/sshd_config ,服务器默认端口是 22 ,修改 Port 22 。0-1024 不用,被系统程序占用,且必须 root 启用,1024-65536可用。

文件末行添加 AllowUsers Jerry 。 顺便确认一下 UseDNS no

重启 ssh 服务 sudo service ssh restart

新开一个命令行登录试试 ssh -p 39999 Jerry@外网IP

2、关闭 root 密码登录
sudo vi /etc/ssh/sshd_config

PermitRootLogin  no
PasswordAuthentication  no
PrimitEmptyPasswords  no (确认一下,默认也是no)
3、配置iptables 和 Fail2Ban 增强安全防护

iptables 防火墙

Fail2Ban 防御性的动作库 监控系统的日志中的行为给相应的操作。可疑行为IP锁定...

搭建 node 生产环境 1、搭建 node 环境

更新系统 sudo apt-get update

一口气安装 sudo apt-get install vim openssl build-essential libssl-dev wget curl git

安装 nvm。 在git上搜索 nvm , install script 下有安装办法 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash 或者 wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

安装某版本的 node nvm install v6.9.5 或者安装最新的 nvm install node

安装一些全局工具包 npm i pm2 webpack gulp grunt-cli -g..

2、借助 pm2 让服务器常驻

可以配置一个taobao镜像,直接 npm 可能很慢

   npm --registry=https://registry.npm.taobao.org install -g npm
   echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
   npm --registry=https://registry.npm.taobao.org install -g cnpm

安装 pm2 cnpm i pm2 -g or npm i pm2 -g or npm --registry=https://registry.npm.taobao.org install -g pm2

Nginx 反向代理

Nginx 持有 80 端口,负责端口转发

更新 sudo apt-get update

安装 nginx sudo apt-get install nginx

解析一个二级域名(A记录)出来 test.segmentfault.com

配置 nginx cd /etc/nginx/conf.d 目录下新增一个配置文件 sudo vi test-3000.conf。检测配置 sudo nginx -t, 重启nginx sudo nginx -s reload

upstream test {
    server 127.0.0.1:3000;
}
server {
    listen 80;
    server_name test.segmentfault.com;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header HOST $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_pass http://test;
        proxy_redirect off;
    }
}

隐藏浏览器 Header 信息中 Nginx 的版本号。 配置 /etc/nginx 下的 nginx.conf,把Basic Settingserver_token off 的注释拿掉。检测配置 sudo nginx -t, 重新加载配置 sudo server nginx reload

静态网站部署 1、项目上传至 git 仓库

把本地和服务端的 id-rsa.pub添加至 git

本地安装 git ,创建并上传项目到 git

服务端安装 git sudo apt-get install git

服务端测试一下 clone 项目 git clone git@github.com:DoFind/test.git

2、配置 pm2 一键部署项目

在本地项目下新增配置文件ecosystem.json 并配置

在服务端新建发布项目的文件夹 /www/test,粗暴给操作 test 的权限 sudo chmod 777 test

vi .bashrc 注释一些代码 source .bashrc

找到以下这几行代码注释掉:

# If not running interactively, don"t do anything
# case $- in
#     *i*);;
#       *)return;; 
# esac 

接送一下项目(从 git 到 服务器) pm2 deploy ecosystem.json production setup

之后的项目更新重启服务 pm2 deploy ecosystem.json production

// ecosystem.json 内容如下:

{
  "apps": [
    {
      "name": "test",
      "script": "app.js",
      "env": {
        "COMMON_VARIABLE": "true"
      },
      "env_production": {
        "NODE_ENV": "production"
      }
    }
  ],
  "deploy": {
    "production": {
      "user": "Jerry",
      "host": ["公网IP"],
      "port": "39999", 
      "ref": "origin/master",
      "repo": "git@github.com:DoFind/test.git",
      "path": "/www/test/production",
      "ssh_options": "StrictHostKeyChecking=no",
      "post-deploy": "npm install --registry=https://registry.npm.taobao.org && pm2 startOrRestart ecosystem.json --env production",
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
我自己遇到的一个问题,无法访问部署在阿里云上的站点:ERR_CONNECTION_TIMED_OUT。 网络诊断的结果是 服务器 不接受 80 端口上的连接
解决:
ECS实例的安全组规则中添加 HTTP(80) ,顺便把 HTTPS(443) 也加进来

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19132.html

相关文章

  • ubuntu 部署 node 务器环境 - 基础

    写在最前 这是根据 imooc 上 Scott 老师的课程整理的,主要是方便自己查找,因为真的记不住... 附上链接:Node.js项目线上服务器部署与发布 静态网站,需要数据库的电影网站、公众号,小程序,app 五种项目的部署。这里只写最简单的静态网站的部署 部署思路 1、完成项目2、购买域名,备案,解析一些二级域名出来备用3、购买服务器 4、ssh 远程登录服务器 并进行一些安全配置5、服务...

    BoYang 评论0 收藏0
  • Ubuntu 14.04 务器部署 Hexo 博客

    摘要:本文将介绍如何在一台的云服务器上快速部署博客站点,如何快速发布一篇博文并通过云服务器上的私有仓库部署到服务器目录下。此外,还要在云服务器上安装和两个必备的软件包。在服务器上部署博客以下为文章正文。 推荐理由:Hexo 是用 Node.js 开发的一个静态站点生成器(Static Site Generator),支持 Markdown 语法写作,有着强大的插件系统,而且性能优异。下面我推...

    cyqian 评论0 收藏0
  • Ubuntu 14.04 务器部署 Hexo 博客

    摘要:本文将介绍如何在一台的云服务器上快速部署博客站点,如何快速发布一篇博文并通过云服务器上的私有仓库部署到服务器目录下。此外,还要在云服务器上安装和两个必备的软件包。在服务器上部署博客以下为文章正文。 推荐理由:Hexo 是用 Node.js 开发的一个静态站点生成器(Static Site Generator),支持 Markdown 语法写作,有着强大的插件系统,而且性能优异。下面我推...

    Prasanta 评论0 收藏0
  • 谈谈Pod在微服务中的运用

    摘要:本文整理自时速云线上微信群分享第十期本文主要包括的基本概念使用场景,以及如何在时速云平台上进行的编排部署,希望对大家在进行微服务架构实践时有所帮助。问关于提供访问容器数据的能力,中包含一个业务和一个服务,时速云的控制台可以进入到容器内部。 本文整理自【时速云线上微信群分享】第十期 本文主要包括Pod的基本概念、使用场景,以及如何在时速云平台上进行Pod的编排部署,希望对大家在进行微服务...

    MASAILA 评论0 收藏0
  • 如何用 Ansible 部署 Kubernetes 集群到 OpenStack

    摘要:测试后,使用来发布。部署软件组件,启动虚拟机,将虚拟机分类到和节点,然后部署密钥清单。集群自动化集群配置由三个控制。自签证书签署的服务器端证书和它的密钥文件。 我们之前聊了把OpenStack跑在K8S上,如何基于Kubernetes在TCP云端创建私有云解决方法,运用在生产或在OpenStack启动虚拟化。今天换个姿势,我们来看看如何在OpenStack虚拟机上运行Kubernete...

    jiekechoo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<