部署服务器,主要由以下几个步骤,下面将围绕这几个步骤,依次展开。
创建主机
目前可以使用各大厂商提供的云服务,快速创建主机。
而不用自己花高昂的价格去买,也不用在全国各地找合适的节点安装部署。
创建用户
创建主机后,默认有一个root账户,拥有所有权限。首先需要需要给root账户设置密码。
设置密码通常有很多规则。而且咱老百姓设置密码通常太简单了,某些程序分分钟就给破解了,
服务器的安全问题更加要注意了,你那简单的密码,就忘了吧,这里推荐一个生成密码的软件pwgen
安装了brew的用户可以使用brew安装
pwgen -C 12
可以生成一堆12位的密码,这里的密码强度还是可以的,选择一个就可以了。
因为root具有所有权限,掌握着整台服务器的生杀大权,万不可落到别人手里。
因此我们部署服务的时候,通常不用root账号去配置。
而是重新设置一个账号去配置。通常是一个服务一个账号,单独管理。
比如我们要设置一个web服务的账号,我们可以这样
add user web
就创建了web账户,当然,你需要为他设定密码,可以使用pwgen采用同样的方法创建一个。
因为在很多地方都需要用到sudo命令,而默认情况下,新建的用户并不具备这个命令的权限。
因此给web账户配置sudo权限。打开/etc/sudoers
文件,发现sudo其实是个用户组,
usermod -G sudo web
把web账户加入sudo这个组就可以了。
使用exit
退出当前用户,输入web@ip
和密码,使用web账户登录。
安装运行环境
像Nodejs Python 这种动态语言而言,必须要有相应环境才能运行。因此需要配置运行环境。
而 C、C++、Golang 、Rust 是静态语言,需要先将项目编译成二进制文件,再直接在服务器运行。
因此静态语言需要配置编译环境,但一般不在服务器配置,而是在其他地方配置编译环境,比如在docker中,
服务器只需要运行编译后的二进制可执行文件即可。
即便是使用nvm安装node运行环境,nvm在正式的生产环境也是很少使用,因为nvm有很多弊端,
比如,nvm将程序安装在了用户目录,这就意味着其他用户无法使用。从而给后期的维护造成麻烦。
因此,可以参考node官网是如何安装的。
把项目同步到服务器
手动部署,比如通过ssh sftp等把文件拉过来,或者使用git clone下来。这些都是手动部署,效率不高。
而现在,越来越多项目在使用自动部署,例如jenkins进行自动化部署,还可以进行自动化测试。可以在docker中安装。
kubernetes 是用来管理docker集群的。
安装进程管理程序
当我们在使用npm start 启动程序时,默认是在前台运行的,一旦使用Ctrl + C
干掉当前的进程回到命令行时,服务也就跟着挂了。
因此,我们想让程序在后台运行,我们可以在命令行的末尾加上 & 比如 npm start &
尽管程序在后台运行了,但是管理这个进程却有不小的麻烦。
因此推荐使用专门的进程管理程序 比如 使用node写的pm2 和使用Python写的supervisor
尽管可以使用pm2 logs来查看日志,但是也有专门的日志服务,来方便我们处理日志,比如elastic
使用ip和端口调试,没问题,使用nginx作为反向代理
先使用IP地址和端口组合进行调试,需要注意的是,root用户才有权限取得1024端口以下的端口,而其他用户是没有这个权限的。
而一般我们写程序也不要指定80端口,而是使用反向代理,使用nginx 将监听的80端口,映射到程序指定的端口处理。
在Ubuntu环境下我们可以使用apt-get 来安装 nginx 服务,
而使用nginx需要在nginx的配置文件配置这个服务端口映射关系。其配置文件路径在 /etc/nginx/config.d/
目录下,不存在是可以创建一个default.conf写入配置。
可以使用 nginx -t
来检测配置是否有问题。
配置完成之后需要使用sudo nginx -s reload
重启服务,以使配置生效。
在node程序中,我们使用了环境变量PORT来指定端口,在自动化配置时,修改端口时或许不太方便,我们也可以使用专业的配置服务来处理这些事情。
比如使用consul来管理配置服务,可以做到配置的集中化。
使用域名访问
IP地址难于记忆,于是就有了域名,将域名和IP地址一一匹配就可以通过域名来访问了,这就是所谓的dns所做的事情,将域名解析为IP地址。
还有些场合要求必须使用域名而不让用ip地址。因此使用域名访问的第一步,就是要注册一个域名。
一个域名只能绑定一个主机,如果想让同一个域名下指定多个主机,可以设置子域名,再指向别的主机。
注册域名之后,要将域名和主机进行绑定。绑定之后,就可以直接使用域名来访问了。
原文链接:https://www.jianshu.com/p/3891c3b67758