想搭建一个Nodejs的生产环境,实现类似heroku的功能

想搭建一个Nodejs的生产环境,实现类似heroku的功能

说是生产环境,其实也就是跑跑个人博客。 之前部署在heroku上,速度有点慢,现在搞了一个阿里云的虚拟机,想自己实现。 环境是CentOS 6.5,想问一下heroku那种通过git部署代码,push到服务器上就能自己更新的功能要通过什么实现? nodejs的forever 这个可以吗?还需要别的技术吗?谢谢

4 回复

想搭建一个Nodejs的生产环境,实现类似Heroku的功能

简介

Heroku 是一个流行的平台即服务(PaaS),它允许开发者通过简单的 Git 部署来托管和运行他们的应用。本帖将介绍如何在你的阿里云 CentOS 虚拟机上实现类似 Heroku 的功能,包括通过 Git 部署代码并自动更新。

技术栈

  • Node.js: 你的应用后端。
  • Git: 用于版本控制和部署。
  • Nginx: 作为反向代理服务器。
  • PM2: 用于进程管理和负载均衡。
  • GitHub/GitLab/Bitbucket: 用于代码托管。

步骤

  1. 设置服务器

    • 确保你的 CentOS 6.5 已经安装了必要的软件包:
      sudo yum update
      sudo yum install git nginx nodejs npm
      
  2. 配置 Nginx

    • 编辑 Nginx 配置文件 /etc/nginx/nginx.conf 或创建一个新的配置文件 /etc/nginx/conf.d/myapp.conf
      server {
          listen 80;
          server_name yourdomain.com;
      
          location / {
              proxy_pass http://localhost:3000; # 假设你的 Node.js 应用运行在 3000 端口
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection 'upgrade';
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
          }
      }
      
    • 重启 Nginx:
      sudo service nginx restart
      
  3. 配置 Git 钩子

    • 在你的服务器上创建一个目录来存放代码:
      mkdir -p /var/www/myapp
      cd /var/www/myapp
      git init --bare
      
    • 创建一个 post-receive 钩子文件:
      nano hooks/post-receive
      
    • 添加以下内容:
      #!/bin/bash
      GIT_WORK_TREE=/var/www/myapp git checkout -f
      npm install
      pm2 startOrRestart ecosystem.config.js
      
    • 使钩子文件可执行:
      chmod +x hooks/post-receive
      
  4. 使用 PM2 管理应用

    • 安装 PM2:
      npm install -g pm2
      
    • 创建一个 ecosystem.config.js 文件来管理应用:
      module.exports = {
        apps : [{
          name: "myapp",
          script: "./index.js",
          instances: "max",
          autorestart: true,
          watch: false,
          max_memory_restart: "1G"
        }]
      };
      
  5. 部署代码

    • 在 GitHub/GitLab/Bitbucket 上创建一个新的仓库,并将你的代码推送到该仓库。
    • 将代码推送到服务器上的 Git 仓库:
      git remote add production ssh://yourusername@yourserver:/var/www/myapp
      git push production master
      

总结

通过上述步骤,你可以在阿里云 CentOS 虚拟机上实现一个类似于 Heroku 的生产环境。使用 Git 钩子自动化部署过程,Nginx 作为反向代理服务器,PM2 来管理 Node.js 应用的进程。这样,每次你推送代码到远程仓库时,都会自动触发部署流程。


heroku是一个云应用引擎,即所谓的Platform as a Service(PaaS)。如果你要实现,得在阿里云虚拟机上安装好Node.js和全局模块,再架一个Git server,最好具备hook的功能。在hook中编写你部署和运行Node.js应用的步骤。PaaS支持多租户,所以每个应用应该运行在一个container中,以便隔离不同用户的应用进程。此外,PaaS还要提供运维、监控等服务。

所以,不如你把源代码托管在Github这样的网站上,在阿里云虚拟机上写个脚本文件,内容是把源代码pull回来,部署和运行应用就完了。没必要想得太复杂。

所以,不如你把源代码托管在Github这样的网站上,在阿里云虚拟机上写个脚本文件,内容是把源代码pull回来,部署和运行应用就完了。没必要想得太复杂。

赞同!

要搭建一个类似Heroku的生产环境来部署和运行你的个人博客,你需要考虑几个关键组件:

  1. Git版本控制系统:用于代码管理。
  2. Web服务器:例如Nginx或Apache,用于处理客户端请求并将请求转发给Node.js应用。
  3. Node.js应用:这是你的博客应用。
  4. 进程管理器:例如foreverpm2,用于确保Node.js应用在服务器重启后仍然能够自动启动并保持运行。

步骤

1. 设置Git仓库

你可以使用GitHub/GitLab等作为远程仓库。在你的阿里云服务器上配置一个Git钩子,使得每当代码推送到远程仓库时,服务器能够自动拉取最新的代码。

示例配置

# 在服务器上安装git
sudo yum install git -y

# 创建一个新的目录用于存放项目代码
mkdir /var/www/myblog
cd /var/www/myblog

# 克隆你的git仓库
git clone https://github.com/yourusername/myblog.git .

# 安装依赖
npm install

# 使用forever启动你的Node.js应用
npm install -g forever
forever start index.js

2. 配置Nginx

配置Nginx作为反向代理来处理来自客户端的请求,并将它们转发到你的Node.js应用。

Nginx配置文件示例

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

3. 使用Git Hooks自动化部署

你可以在Git仓库中设置一个post-receive钩子,以便在每次推送代码时自动触发部署脚本。

示例post-receive钩子

#!/bin/bash
GIT_REPO=$HOME/myblog.git
PROJECT_ROOT=/var/www/myblog
GIT_WORK_TREE=$PROJECT_ROOT
export GIT_DIR=$GIT_REPO

cd $PROJECT_ROOT
git pull
npm install
forever restartall

4. 使用PM2替代Forever(可选)

PM2是一个更强大的进程管理器,提供更多的功能如负载均衡、日志管理和监控。

# 安装PM2
npm install -g pm2

# 启动应用
pm2 start index.js --name myblog

# 保存PM2进程配置以便于重启时自动启动
pm2 startup
pm2 save

通过这些步骤,你可以构建一个基本的、类似Heroku的生产环境,以支持你的个人博客。

回到顶部