Open breakinferno opened 6 years ago
六、开机自动启动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
保存并退出,下次重启会生效。
有时你的包不想发到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
CentOS
1. 系统配置简介
第一次租了一个服务器,打算在这个服务器上进行真刀真枪进行项目开发,不再是像以前一样项目只是在本地跑。但是由于囊中羞涩,所以租的这个服务器并不是太好,可以说是很差了。
这里是我服务器的参数:
2, 踩坑的环境安装
2.1 操作系统
系统基本信息:
可以看到操作系统发行版本是
4.10.4-1.el6.elrepo.i686
喔,centos6.10
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那么可能遇见如下错误:
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
CentOS自带的源没有nginx,所以需要自己指定位置:
新建一个文件
vim /etc/yum.repos.d/nginx.repo
内容为:完成之后
sudo yum install -y nginx
即可启动nginx:
service nginx start
来看看nginx状态吧:
ps -ef | grep nginx
,结果如下:这时候最坑的一点,我装了很多次才装好,主要是32位系统的mongodb版本问题。使用这里的方法根本不行。解决方案使用如下:
同nginx一样创建配置文件:
vim /etc/yum.repos.d/mongodb.repo
添加内容:
最后
sudo yum -y install mongodb-org
日志查看:
vim /var/log/mongodb/mongod.log
service mongod start
启动mongodbservice mongod stop
关闭mongodbchkconfig mongod on
随系统启动按照网上很多人的做法都是不能安装的,会爆
No package mongodb-org available.
错误。原因应该是系统位数不同,所以以上是我的解决方法,找了一个32位系统的mongo版本。来源于这里
1. 依赖安装
yum install -y tcl gcc-c++ wget
,我们上面安装了gcc-c++ wget这里可以只安装tcl即可简单的步骤:
编译之后别忘了验证一下:
安装完成
配置
启动
echo "/usr/local/bin/redis-server /etc/redis.conf" >>/etc/rc.local
。当然还有很多种方式,比如使用systemctl将redis作为服务启动并且添加开机自启动。
没有配置成redis服务
如果配置成redis服务则:
service redis restart