breakinferno / breakinferno.github.io

0 stars 0 forks source link

记一次CentOS环境搭建过程 #4

Open breakinferno opened 6 years ago

breakinferno commented 6 years ago

CentOS

1. 系统配置简介

第一次租了一个服务器,打算在这个服务器上进行真刀真枪进行项目开发,不再是像以前一样项目只是在本地跑。但是由于囊中羞涩,所以租的这个服务器并不是太好,可以说是很差了。

这里是我服务器的参数:

  1. SSD: 10G
  2. RAM: 500M
  3. CPU: 1x Intel Xeon
  4. Network: 1Gigabit 服务器选择看这里

2, 踩坑的环境安装

2.1 操作系统

系统基本信息:

[root@host yum.repos.d]# vim  /var/log/mongodb/mongod.log
[root@host yum.repos.d]# cat /proc/version
Linux version 4.10.4-1.el6.elrepo.i686 (mockbuild@Build64R6) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) ) #1 SMP Sat Mar 18 11:05:18 EDT 2017
[root@host yum.repos.d]# uname -a
Linux host.localdomain 4.10.4-1.el6.elrepo.i686 #1 SMP Sat Mar 18 11:05:18 EDT 2017 i686 i686 i386 GNU/Linux
[root@host yum.repos.d]# uname -r
4.10.4-1.el6.elrepo.i686

可以看到操作系统发行版本是4.10.4-1.el6.elrepo.i686

[root@host yum.repos.d]# cat /etc/issue
CentOS release 6.10 (Final)
Kernel \r on an \m

[root@host yum.repos.d]# cat /etc/redhat-release
CentOS release 6.10 (Final)

喔,centos6.10

[root@host yum.repos.d]#  getconf LONG_BIT
32

32位的系统

2.2 node+nginx+mongodb+redis的搭建

ssh进入系统:ssh -p port username@remote_ip,输入密码。

首先更新一下 yum -y update

加入一些必备的工具: sudo yum install vim wget curl git

看看git成功没有: git --version

Node安装

打算使用nvm来安装node: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

检查nvm: nvm --version

查看node版本: nvm ls-remote

安装node: nvm install 8

PS: 如果你安装node 10.x那么可能遇见如下错误:

which: no python2.7 in (/root/.nvm/versions/node/v8.12.0/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
ERROR: Did not find a new enough assembler, install one or build with
       --openssl-no-asm.
       Please refer to BUILDING.md
nvm: install v10.10.0 failed!

emmm时间关系没有解决。直接安装了node v8.12.0版本

顺便再装一个pm2吧.npm i -g pm2

Nginx

nginx是C语言开发,建议在linux上运行

1、gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:

yum install gcc-c++ make

2、PCRE PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

yum install -y pcre pcre-devel

注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

3、zlib zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

yum install -y zlib zlib-devel

4、openssl OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

yum install -y openssl openssl-devel

  1. nginx

CentOS自带的源没有nginx,所以需要自己指定位置:

新建一个文件vim /etc/yum.repos.d/nginx.repo 内容为:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

完成之后sudo yum install -y nginx即可

启动nginx: service nginx start

来看看nginx状态吧: ps -ef | grep nginx,结果如下:

[root@host yum.repos.d]# ps -ef | grep nginx
root     20558     1  0 03:32 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx    20559 20558  0 03:32 ?        00:00:00 nginx: worker process
root     21427 20585  0 05:18 pts/0    00:00:00 grep nginx
  1. MongoDB

这时候最坑的一点,我装了很多次才装好,主要是32位系统的mongodb版本问题。使用这里的方法根本不行。解决方案使用如下:

同nginx一样创建配置文件:vim /etc/yum.repos.d/mongodb.repo

添加内容:

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686/
gpgcheck=0
enabled=1

最后sudo yum -y install mongodb-org

日志查看:vim /var/log/mongodb/mongod.log

service mongod start 启动mongodb service mongod stop 关闭mongodb chkconfig mongod on 随系统启动

按照网上很多人的做法都是不能安装的,会爆No package mongodb-org available.错误。原因应该是系统位数不同,所以以上是我的解决方法,找了一个32位系统的mongo版本。

来源于这里

  1. Redis

 1. 依赖安装

yum install -y tcl gcc-c++ wget,我们上面安装了gcc-c++ wget这里可以只安装tcl即可

  1. 下载解压redis

简单的步骤:

mkdir /opt/redis/
cd /opt/redis/
wget http://download.redis.io/releases/redis-3.0.4.tar.gz
tar -xzvf redis-3.0.4.tar.gz
  1. 编译安装redis

编译之后别忘了验证一下:

cd redis-3.0.4
make
make install    
-------------------------------------------------------------
make install安装完成后,会在/usr/local/bin目录下生成下面几个可执行文件,它们的作用分别是:
redis-server:Redis服务器端启动程序
redis-cli:Redis客户端操作工具。也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具
redis-check-aof:数据修复工具
redis-check-dump:检查导出工具

安装完成

  1. 配置启动redis

配置

cp redis.conf /etc/   复制配置文件到/etc/目录
vim /etc/redis.conf    修改redis文件
----------------------------------------------
daemonize yes     修改daemonize配置项为yes,使Redis进程在后台运行

启动

cd /usr/local/bin       进入bin目录下
./redis-server /etc/redis.conf      启动Redis
ps -ef | grep redis         查看redis进程
  1. 开机自启动

echo "/usr/local/bin/redis-server /etc/redis.conf" >>/etc/rc.local

当然还有很多种方式,比如使用systemctl将redis作为服务启动并且添加开机自启动。

  1. 重启

没有配置成redis服务

/usr/local/bin/redis-cli shutdown
/usr/local/bin/redis-server /etc/redis.conf

如果配置成redis服务则:service redis restart

breakinferno commented 6 years ago

Nginx 拓展(未尝试)

六、开机自动启动nginx 这里使用的是编写shell脚本的方式来处理

1、创建shell脚本文件 vi /etc/init.d/nginx (输入下面的代码)

#!/bin/bash

# nginx Startup script for the Nginx HTTP Server

# it is v.0.0.2 version.

# chkconfig: - 85 15

# description: Nginx is a high-performance web and proxy server.

#              It has a lot of features, but it's not for everyone.

# processname: nginx

# pidfile: /var/run/nginx.pid

# config: /usr/local/nginx/conf/nginx.conf

nginxd=/usr/local/nginx/sbin/nginx

nginx_config=/usr/local/nginx/conf/nginx.conf

nginx_pid=/var/run/nginx.pid

RETVAL=0

prog="nginx"

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginxd ] || exit 0

# Start nginx daemons functions.

start() {

if [ -e $nginx_pid ];then

   echo "nginx already running...."

   exit 1

fi

   echo -n $"Starting $prog: "

   daemon $nginxd -c ${nginx_config}

   RETVAL=$?

   echo

   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx

   return $RETVAL

}

# Stop nginx daemons functions.

stop() {

        echo -n $"Stopping $prog: "

        killproc $nginxd

        RETVAL=$?

        echo

        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid

}

# reload nginx service functions.

reload() {

    echo -n $"Reloading $prog: "

    #kill -HUP `cat ${nginx_pid}`

    killproc $nginxd -HUP

    RETVAL=$?

    echo

}

# See how we were called.

case "$1" in

start)

        start

        ;;

stop)

        stop

        ;;

reload)

        reload

        ;;

restart)

        stop

        start

        ;;

status)

        status $prog

        RETVAL=$?

        ;;

*)

        echo $"Usage: $prog {start|stop|restart|reload|status|help}"

        exit 1

esac

exit $RETVAL

更改该文件权限 :chmod a+x /etc/init.d/nginx

如果修改了nginx的配置文件nginx.conf,也可以使用上面的命令重新加载新的配置文件并运行,可以将此命令加入到rc.local文件中,这样开机的时候nginx就默认启动了

2、加入到rc.local文件中 vi /etc/rc.local

加入一行 /etc/init.d/nginx start 保存并退出,下次重启会生效。

breakinferno commented 6 years ago

这里这里看这里

Sinopia 私有npm库的搭建

有时你的包不想发到npm官网上去,只想私用,那么可以自己搭建一个npm服务站点。这里采用sinopia这个零配置的私有的带缓存功能的npm包管理工具。当然这个工具已经没有维护了,所以可以使用其fork--。Verdaccio来搭建。当然大同小异罢了。

安装

npm install -g sinopia

顺便为了好管理npm源安一个nrm吧

npm i -g nrm

常用的命令

nrm ls // 列出可用源
nrm use taobao // 使用淘宝源
nrm test {registryName} // 测试源速度
nrm add {registry} {url} // 添加源 比如:nrm add sinopia http://breakinferno.cn:52000
nrm del {registry} // 删除源

运行

简单的输入名字即可。

sinopia

但是这样如果你退出服务器或者你ctrl+c关闭了服务那就不行了。所以使用pm2来管理这个程序。

pm2 start `which sinopia`

which指令会输出sinopia可执行位置。``会将该指令的结果作为返回值,类似于which sinopia是个变量。当然停止服务使用stop了。

pm2 stop `which sinopia`

更多pm2

配置

Sinopia的特点是,你在哪个目录运行,它的就会在对应的目录下创建自己的文件。目录下默认有两个文件: config.yaml :sinopia配置文件 storage:用户npm install时如果私有npm仓库中没有所需要的包,会从备用第三方库中拉取并缓存到该目录。下一次安装同样的包时就可以直接从私有npm仓库中拉取 htpasswd :添加用户之后自动创建

config.yaml配置文件:

storage: 仓库保存的地址,publish时仓库保存的地址。

auth: htpasswd file:账号密码的文件地址,初始化时不存在,可指定需要手工创建。

               max_users:默认1000,为允许用户注册的数量。

                    为-1时,不允许用户通过npm adduser注册。

                  但是,当为-1时,可以通过直接编写htpasswd file内容的方式添加用户。

语法:用户名:{SHA}哈希加密的字符=:autocreated 时间

加密算法:SHA1哈稀之后再转换成 Base64 输出就好

uplinks: 配置上游的npm服务器,主要用于请求的仓库不存在时到上游服务器去拉取。

packages: 配置模块。access访问下载权限,publish包的发布权限。

 scope:两种模式,一种是 @*/* 表示某下属的某项目;另一种是 * 匹配项目名称(名称在package.json中有定义)

 权限:

  access: 表示哪一类用户可以对匹配的项目进行安装(install)

  publish: 表示哪一类用户可以对匹配的项目进行发布(publish)

  proxy: 如其名,这里的值是对应于 uplinks 的名称,如果本地不存在,允许去对应的uplinks去取。

  操作:

  $all 表示所有人(已注册、未注册)都可以执行对应的操作

  $authenticated 表示只有通过验证的人(已注册)可以执行对应操作,注意,任何人都可以去注册账户。

  $anonymous 表示只有匿名者可以进行对应操作(通常无用)

  或者也可以指定对应于之前我们配置的用户表 htpasswd 中的一个或多个用户,这样就明确地指定哪些用户可以执行匹配的操作

listen:配置监听端口和主机名。

       localhost:4873 #默认

       0.0.0.0:4873 #在所有网卡监听

代理:

#http_proxy: http://something.local/  #http代理

#https_proxy: https://something.local/  #https代理

#no_proxy: localhost,127.0.0.1  #不适用代理的iP

更改之后别忘了使配置文件生效。

sinopia -c config.yml

发包

你懂得,先注册,再添加用户。已注册则直接adduser,这是命令:

npm adduser

npm login

最后发布

npm publish

问题

sinopia可能导致@字符开头的包不能下载。比如@angular/core,就会下载失败。这其实是Sinopia自己的bug,bug产生的原因就是:sinopia在代理到npmjs.org公有库时将@符号转码为%40,致使在公有库中找不到对应的包,返回404 ,简单点说就是 @angular/core 代理请求的时候被转换成了 %40angular/core,所以我们需要在代理请求发出之前将其转回 @angular/core

修改sinopia源码:修改位于sinopia/lib/up-storage.js文件第10行:将var encode = encodeURIComponen;,更改为:var encode = function(thing) {return encodeURIComponent(thing).replace(/^%40/, '@');}; ,这段代码的含义就是将%40转回@,于是就解决了不能下载带有@符号的npm包的bug。当然最好的还是试用verdaccio