Metagraph部署篇---总论

129 阅读5分钟

基于CentOS的部署方案

前言

  • 云服务器为腾讯云(或阿里云)轻量应用服务器
  • 连接远程服务器 ssh
  • Linux包管理工具 yum rpm
# 安装redis
yum install redis
rpm -qa|grep redis
rpm -ql xxxxx
  • nginx服务器
  • git基础知识
  • linux scp命令,复制文件至远程服务器
  • 计算机网络基础知识——端口

2. Metagraph技术栈说明

服务器部署,就是将各种服务跑在服务器的不同端口上,提供服务。有一些端口会被开放出来,能够被外网访问,有一些则只提供内部服务。

端口,英文为port,是对外提供服务的一种渠道。

通常一个完整的web项目包括前端静态资源Web服务数据库服务三个部分。以Metagraph为例,

  • 前端基于Vue开发,采用前端工程化手段打包生成静态资源。
  • 服务端基于Node.js技术栈,采用Nest.js框架开发。
  • 数据库服务包括MongoDB、Redis、Neo4j(图数据库)。

上述三种服务默认情况下占用的端口号如下。

  • 静态资源服务
    • http 80
    • https 443
  • web服务
    • web api接口 8000
    • webSocket接口 8001
  • 数据库服务
    • neo4j
      • 7687 bolt
      • 7474 http
      • 7473 https
    • mongoDB 27017
    • redis 6379

3. 静态资源部署

前端应用打包后,通常会生成一个包含index.html的文件夹。将生成好的静态资源文件夹上传至服务器的指定文件夹。

server {
    listen   80;
    # 指定域名
    server_name metagraph.design;
    index index.html;
    location / {
       # 指定静态资源所在文件夹 
       root   /home/dist;
    }
}

Nginx静态资源配置如上,在配置文件中,指定了静态资源的目录为/home/dist。之后将静态资源上传至服务器中,使用linux命令scp

scp -r  /xxx/metagraph/dist  root@xx.xx.xx.xx:/home/dist

4. nodejs服务部署

4.1 nodejs服务启动

通常,启动一个node.js进程需要先将工程打包。打包后的node.js工程会包含一个入口文件。假设入口文件为index.js,执行node index.js就可以启动服务。

但是这种启动方式,当用户按下ctrl + c服务就会断开,因此服务需要以一种守护进程的方式启动。

4.2 pm2介绍

4.2 以守护进程方式启动

pm2是一款常驻进程工具。

pm2 start index.js

针对nodejs提供的服务,nginx配置相应的端口。

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    # rest api
    location /api/ {
        include  uwsgi_params;
        proxy_pass   http://0.0.0.0:8000/;
    }
    # websocket api
    location /websocket {
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 升级http1.1到 websocket协议
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection  $connection_upgrade;
        proxy_pass   http://0.0.0.0:8001;
    }
}

5. mongodb数据库部署

5.1 yum安装mongodb

mongodb官方yum指南

创建一个文件 /etc/yum.repos.d/mongodb-org-4.2.repo,写入以下配置。

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

执行安装命令。

sudo yum install -y mongodb-org

5.2 配置mongodb数据库

安装完成后,mongodb默认配置文件放在/etc/mongod.conf

配置文件内容如下

port=27027 # 默认端口号为27017,建议修改
fork=true # 以创建子进程的方式运行
dbpath=/data/db #日志输出方式数据库路径
logappend=true #日志输出方式,日志append而不是overwrite
logpath=/data/logs/mongo.log #日志路径
auth=true #开启安全验证(可以不开启)
bind_ip=0.0.0.0

务必确保日志目录是存在的

启动mongodb

mongod -f /etc/mongod.conf

配置mongodb密码。

# 通过终端启动mongodb
mongo --port 27027 # 修改默认端口号,需要指定新端口

# 切换到admin用户
use admin
# 创建新用户
db.createUser({ 
    user: "username", pwd: "password", roles: [{ role: "root", db: "admin" }] 
})

# 下次再登录时
use admin
db.auth('username', 'password')

数据库连接。远程连接,数据库需要开放0.0.0.0,并且如果是部署在云服务器上,还需要在云服务器后台防火墙开放相应端口。

mongodb://username:password@xx.xx.xx.xx:27017/?authSource=admin

linux重启mongodb

[root@VM-20-15-centos ~]# ps aux |grep mongodb
# root     22277  0.0  0.0 112828   980 pts/0    D+   19:13   0:00 grep --color=auto mongodb

kill -9 8827

mongod -f /etc/mongod.conf

6. redis数据库部署

yum install redis

配置文件位置 /etc/redis.conf

# 建议修改默认端口号
port 6379
# yes: 开启守护进程方式; no: 
daemonize yes
bind 0.0.0.0
# 修改密码
requirepass xxxxxxx

启动redis

redis-server /etc/redis.conf

7. neo4j部署方案

最新版本的neo4j支持yum

安装连接

rpm --import https://debian.neo4j.com/neotechnology.gpg.key

添加yum镜像 /etc/yum.repos.d/neo4j.repo:

[neo4j]
name=Neo4j Yum Repo
baseurl=http://yum.neo4j.com/stable
enabled=1
gpgcheck=1

然后下载。

yum install neo4j

neo4j会下载如下四个包。

验证中      : 1:java-11-openjdk-headless-11.0.14.1.1-1.el7_9.x86_64                  1/4
验证中      : 1:java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64                           2/4
验证中      : cypher-shell-4.4.4-1.noarch                                            3/4
验证中      : neo4j-4.4.4-1.noarch                                                   4/4

neo4j会默认下载java依赖,必须设置和neo4j依赖一样的jdk环境。

# 搜索java
[root@VM-8-16-centos yum.repos.d]# rpm -qa|grep java

java-11-openjdk-11.0.22.0.7-1.el7_9.x86_64
javapackages-tools-3.4.1-11.el7.noarch
java-11-openjdk-headless-11.0.22.0.7-1.el7_9.x86_64
python-javapackages-3.4.1-11.el7.noarch
tzdata-java-2024a-1.el7.noarch
 

# 查找 jdk 路径
rpm -ql java-11-openjdk-11.0.22.0.7-1.el7_9.x86_64

# 通过 sudo 进入/etc/profile文件
sudo vim /etc/profile

# jdk配置  /etc/profile文件中写入
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.14.1.1-1.el7_9.x86_64   
CLASSPATH=$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME CLASSPATH

# 修改/etc/profile文件之后执行
source /etc/profile


# 查看java版本
[root@VM-8-16-centos yum.repos.d]# java --version
openjdk 11.0.22 2024-01-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.22.0.7-1.el7_9) (build 11.0.22+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.22.0.7-1.el7_9) (build 11.0.22+7-LTS, mixed mode, sharing)

修改neo4j配置文件

设置neo4j外部可访问

# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
dbms.connectors.default_listen_address=0.0.0.0
  • bolt config
# Bolt connector
dbms.connector.bolt.enabled=true
#dbms.connector.bolt.tls_level=DISABLED
dbms.connector.bolt.listen_address=:7687
#dbms.connector.bolt.advertised_address=:7687
  • http config
# HTTP Connector. There can be zero or one HTTP connectors.
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=0.0.0.0:7474
#dbms.connector.http.advertised_address=:7474

启动neo4j命令行

neo4j start
neo4j stop
neo4j restart

neo4j初始用户名和密码为 neo4j neo4j。

登录 web端neo4j可以更改neo4j默认密码。

8. 安装mysql

首先下载mysql的yum源配置

 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

安装mysql的yum源

yum -y install mysql57-community-release-el7-11.noarch.rpm

通过yum安装mysql

yum -y install mysql-server --nogpgcheck

启动mysql

systemctl start mysqld.service
systemctl status mysqld.service
# 重启mysql
systemctl restart mysqld

命令行进入mysql

找到mysql临时密码

cat /var/log/mysqld.log| grep password

通过临时密码进入mysql

mysql -uroot -p

修改mysql默认密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

修改密码可能会遇到密码不符合安全策略

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxx';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

修改密码级别

mysql> set global validate_password_policy=0;

修改其他机器访问mysql授权

# 基本格式如下 
grant all privileges on 数据库名.表名 to '新用户名'@'指定ip' identified by '新用户密码' ;
# 添加授权
grant all privileges on *.* to 'root'@'%' identified by '123456Admin@123' with grant option;
# 立即刷新配置
flush privileges;

修改mysql默认端口 mysql配置文件默认放在/etc/my/cnf里

9. 安装nodejs

方案一 yum安装

NodeSource是一家致力于提供企业级Node支持的公司。

curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -

sudo yum install nodejs

方案二 源码安装

下载源码,在nodejs.org/en/download… 下载适合版本的nodejs

# 跳转至安装目录
cd /usr/local/src/

# 下载源码
wget https://nodejs.org/dist/latest-v16.x/node-v16.20.2-linux-x64.tar.gz

# 解压源码
tar -zxvf node-v16.20.2-linux-x64.tar.gz

# 进入源码文件夹
cd node-v16.20.2-linux-x64.tar.gz

# 查看解压后文件夹下内容
[root@VM-8-16-centos node-v16.20.2-linux-x64]# ls
bin  CHANGELOG.md  include  lib  LICENSE  README.md  share

# 进入bin文件夹
[root@VM-8-16-centos node-v16.20.2-linux-x64]# cd bin

# 查看bin目录下内容
[root@VM-8-16-centos bin]# ls
corepack  node  npm  npx

# 测试node是否可用
[root@VM-8-16-centos bin]# ./node -v
v16.20.2

# 测试npm是否可用
[root@VM-8-16-centos bin]# ./node npm -v
8.19.4

# 查看当前路径
[root@VM-8-16-centos bin]# pwd
/usr/local/src/node-v16.20.2-linux-x64/bin

# 编辑环境变量
sudo vi /etc/profile

# 输入 `i` 即可对文件进行编辑。
#在文件底部添加环境变量
export NODEJS_HOME=/usr/local/lib/node/nodejs
export PATH=$NODEJS_HOME/bin:$PATH

# 更新配置
source /etc/profile

tar.zxtar.gz有什么区别?

两种文件都是压缩了的tar文件,只是压缩算法不同。 tar.gz使用的是gzip压缩工具,tar.xz使用的是xz工具。但对于使用者来说,二者的解压没有区别。 解压

进目录

测试是否安装成功

创建node npm 软链接

ln -s /www/node-vxx.xx.x-linux-x64/bin/node /usr/local/bin/node
ln -s /www/node-vxx.xx.x-linux-x64/bin/npm /usr/local/bin/npm

10. 安装git

在Linux上使用yum安装Git,非常简单,只需要一行命令

# 安装命令
yum -y install git

# 查看是否可用
[root@VM-8-16-centos etc]# git --version
git version 1.8.3.1

基于Docker的部署方案