对于个人网站开发者来说,开发完网站并不意味着万事大吉,而是一个新的开始。刚开始,面临的一个最大的挑战是生产服务器的环境搭建。除此之外,还有网站的部署,运营,维护。在这篇文章,我将讲述生产服务器的环境配置,还有以Node服务为例,讲述项目一键部署。
吐槽一下:这篇文章的产生缘由是我要独立开发一个易班轻应用。对于为何要使用易班开放平台而不是其他如微信开放平台,人家的解释是:上面领导要求的嘛。人家要一个五彩斑斓的黑你有什么办法。整个部门就你会开发,你不搞谁搞。所以,就知难而上了,用了两个月,前端后端都搞了一遍,终于上线了一个全校用的轻应用,还别说,日均有200-300的独立用户,周五的话就有800多独立用户了,感觉服务器2核4G4M还行,Node可以开两个集群。话说我一个前端为何要搞全栈emmmmmm。我只想安安静静地做一个前端。
备注1:
这篇文章的所有配置都基于阿里云服务器,服务器配置:2核CPU,4G内存,4M宽带,系统:ubantu14.04。
备注2:
这篇文章的教程操作环境是在windows10电脑。
备注3:
这篇文章的服务器是指阿里云服务器。也许你得去购买一台。
备注4:
这篇文章假定我们拥有一台公网IP为123.456.789.1的服务器
服务器说白了,就是一台没有显示器的电脑。可以接入各种外界设备,像你的电脑一样用。但是,个人电脑并不能24小时开机,也不能永远保持网络连接,很少用于对外提供在线服务,当然,也不安全。所以,服务器就是最佳选择了。那么,提供对外服务,首先你得把你的服务器环境搭建好。就像酒店提供住宿服务,得把房间打扫好,热水wifi准备好,客人享受你的服务才会舒舒服服的。
服务器通常不和你在一个地方的。你要用你自己的电脑远程连接服务器。这是服务器登录。
通常我们用windows登录linux系统的服务器的时候,要用到命令行窗口
。你可以用putty
或者xshell
等软件。但是最初,最好还是用windows自带cmd来进行远程登录。下面是步骤(假设你是第一次登陆)
ssh -o ServerAliveInterval=30 [email protected]
,回车,成功连接就会出现密码输入。-o ServerAliveInterval=30
是为了让window定时刷新连接,要是登录后,我们很久不输入新命令,就会断开连接。所以加上这句,防止断开连接,也可以不加)C:\User\PC> ssh -o ServerAliveInterval=30 [email protected]
光标不移动
。[email protected]'s password:
这样我们就成功登陆了。
root用户权限是超级用户,所以可以使用很多敏感命令,要是一不小心让别人登录了,那就麻烦大了。所以添加一个用户作为我们日常开发用很有必要,也提高了我们服务器的安全。
思路:
下面是我们的操作。当你登录之后,就会看到如下命令行:
root@iZwz9bq2dcwm9smklir3ntZ:~$
这是我们的服务器的命令行界面,在这里输入正确的命令就能对服务器进行各种操作。
adduser userName
,其中userName是你要创建的用户名字,比如yban。再输入这个用户的密码,回车,再输入一遍,回车,用户就创建好了。命令如下:root@iZwz9bq2dcwm9smklir3ntZ:~$ adduser yban
sudo
角色权限,之后这个用户使用sudo命令时候,隔一段时间就要输入用户密码密码。其中userName是你创建的用户名字。命令如下:root@iZwz9bq2dcwm9smklir3ntZ:~$ gpasswd -a userName sudo
visudo
的nano窗口,添加相应的用户配置。命令如下:root@iZwz9bq2dcwm9smklir3ntZ:~$ sudo visudo
root ALL=(ALL:ALL) ALL
,在这行下面添加一行userName ALL=(ALL:ALL)ALL
,其中userName要替换成你新增用户名(如yban)。这行代码中的第一个ALL
是说对所有的用户生效,第二个ALL
是说yban可以以任何用户执行命令,第三个ALL
是说yban可以以任何组执行命令,最后一个ALL
是说这个规则适合所有命令。#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
yiban ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Ctrl+X
,就会在下面出现一个语句。Save modified buffer (ANSERING "NO" WILL DESTROY CHANGES)?
Y Yes
N NO ^C Cancel
按shift+y
(大写的Y)就是确定,按shift+n
(大写的N)就是退出,按Ctrl+C
就是取消退出,继续编辑。
当你选择了以上三个中的一个之后,按下回车,就回到命令行界面了。
添加用户操作完成。
ssh [email protected]
,如果出现提示输入密码,那么就成功了。在这里输入你刚才创建用户的密码
,而不是root密码
C:\User\PC>ssh [email protected]
[email protected]'s password:
由于每次登录服务器都要输入密码太麻烦了,能不能输入一行命令就能够登录呢?答案是可以的。
在这里我们要明白一个概念,什么是基于密匙的登录。如果依靠账号跟密码登录服务器,那么只要有人知道你的账号跟密码,那么就能够登录你的服务器。这不太安全。也有可能你连接不是你想连接的服务器。如果使用密匙,那么只要你登录时,电脑上有私钥,服务器上有公钥,两者一对比,就能够确认你是该用户而且较为安全。
思路以及原理:
图解:
操作流程:
1. 生成密钥
这一步要先下载git,使用git bash命令行窗口在window下运行linux命令。
C:/User/PC
目录。下载安装好git之后,在桌面右击鼠标,就会出现git 窗口选项,点击git bash Here
,就会出现下面的窗口cd ~
就会进入用户目录PC@DESKTOP-S4IM1EA MINGW64 ~/Desktop
$ cd ~
cd .ssh
。下面命令是创建文件夹。创建完成后进入该文件夹。PC@DESKTOP-S4IM1EA MINGW64 ~
$ mkdir .ssh
PC@DESKTOP-S4IM1EA MINGW64 ~
$ cd .ssh
.ssh
文件夹应该为空。在这里输入ssh-keygen -t rsa -b 4096 -C "你的邮箱或github邮箱"
PC@DESKTOP-S4IM1EA MINGW64 ~
$ ssh-keygen -t rsa -b 4096 -C "你的邮箱或github邮箱"
.ssh
文件夹中出现两个文件id_rsa
和id_rsa.pub
私钥和公钥。除了ssh免密登录服务器之外,我们还可以把公钥放在github账户下,方便我们远程上传代码。eval "$(ssh-agent -s)
,回车PC@DESKTOP-S4IM1EA MINGW64 ~
$ eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
,回车PC@DESKTOP-S4IM1EA MINGW64 ~
$ ssh-add ~/.ssh/id_rsa
到此,本地的公钥和私钥就配置完成,ssh服务也开启了。
2. 上传公钥到服务器
.ssh
文件夹。如果没有则新建,如第一步。yban@iZwz9bq2dcwm9smklir3ntZ:~$ cd .ssh
authorized_keys
这个文件中,步骤如下:
C:/Users/PC/.ssh/id_rsa.pub
,全部复制。sudo vi authorized_keys
,新建并打开该文件。I
键编辑。光标应该在左上角,按右键粘粘。Esc
键退出编辑。shift+;
,按出来冒号:
wq!
,就像:qw!
。回车保存退出。authorized_keys
文件的读写权限。在你用sudo命令的时候有时候会提示输入密码。那就输入该用户的密码就是。命令如下:yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo chmod 600 authorized_key
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo service ssh restart
最后,保证该窗口不关闭。新开一个窗口,输入下列命令,不会出现输入密码可以直接登录,即为成功设置。
C:\User\PC> ssh -o ServerAliveInterval=30 userName@你的公网IP
防火墙是为了拒绝恶意访问。但是连接服务器呢?所以我们要防止我们自己之外的人连接我们的服务器。
我们可以通过修改ssh连接的默认端口来达到我们的目的,减少被别人扫描和猜测的概率。如果在阿里云购买的服务器,可以修改安全组中的22端口白名单,只允许我们电脑的Ip登录。
修改默认端口步骤如下:
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/ssh/sshd_config
# what ports,IPS and protocols we listen for
Port 22
AllowUsers: userName
,添加你的用户名。Esc
,输入冒号加wq!:wq!
回车保存退出yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo service ssh restart
C:\User\PC> ssh -p 你修改的端口 -o ServerAliveInterval=30 userName@你的公网IP
因为购买服务器或初始化服务器的时候,通常第一个用户名就是root。别人可以去扫描root下所有的端口的权限。所以我们要关闭root的密码登录,减少风险。
步骤如下:
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/ssh/sshd_config
PermitRootLogin yes
修改为no
,还有PasswordAuthentication yes
更改为no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PAM authentication via ChallengeResponseAuthentication may bypass
# If you just want the PAM account and session checks to run without
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes
AllowUsers:yban
Esc
,输入冒号加wq!:wq!
回车保存退出yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo service ssh restart
C:\User\PC> ssh -p 你修改的端口 -o ServerAliveInterval=30 root@你的公网IP
ssh: connect to host 你的公网IP port 你修改的端口 : Connection refused
出现拒绝就是成功。
虽然服务器是给别人访问的,但是也有好人访问和坏人访问的区别。我们得拒绝坏人的访问。所以防火墙的配置是必须的。
下面是配置防火墙的步骤。首先你得连接上服务器。
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get update && sudo apt-get upgrade
iptables
所有规则,再去进行配置yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo iptables -F
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/iptables.up.rules
# 允许所有建立起来的连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许所有出去的流量
-A OUTPUT -j ACCEPT
# 允许HTTPS和HTTP请求下的连接
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
# 为远程连接建立通道
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# 允许ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# 记录拒绝的请求
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7
# 拦截恶意,频繁请求
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 150 -j DROP
# 拒绝其他请求
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
Esc
,输入冒号加wq!(:wq!
)回车保存退出iptables
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo iptables-restore < /etc/iptables.up.rules
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo ufw status
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo ufw enable
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/network/if-up.d/iptables
#!/bin/sh
iptables-restore /etc/iptables.up.rules
Esc
,输入冒号加wq!(:wq!
)回车保存退出yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo chmod +x /etc/network/if-up.d/iptables
至此,防火墙基本配置已经完成,你的服务器不再是裸奔了。
fail2ban是一个防御性的工具库,通过系统的日志文件,根据检测到的任何可疑行为,触发不同的防御动作。比如将可疑的目标ip进行拒绝访问。可以防御一些等级的可疑行为。
下载安装配置如下:
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get update && sudo apt-get upgrade
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get install fail2ban
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/fail2ban/jail.conf
action = %(action_)s
为action = %(action_mw)s
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo service fail2ban status
stop
,启动start
以上的配置都是为了更加安全的服务器环境,我们能够方便登录操作,服务器能够在别人的恶意试探和攻击中仍然可以提供稳定的线上服务。
百度上介绍是这样的:
Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。
所以说,web服务器可以被用户请求资源,可以是网页,数据,文件,图片等。作为
服务提供方的我们,就要使用服务器上的应用提供服务给用户。
下面是服务器常见应用配置,分三类
下面就是服务器环境的介绍以及下载安装配置运行。
在此之前,请按照下面语句:
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get update
yban@iZwz9bq2dcwm9smklir3ntZ:~$ udo apt-get install vim openssl build-essential libssl-dev wget curl git
百度上是这样说的:
nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
所以,一般我们把Nginx作为网站的前置服务器处理所有用户请求,再根据请求的不同分发到不同的web服务器中。可以做负载均衡。在我们的服务器中,80端口只有一个,但是我们想在一台服务器跑很多服务,怎么办。那就用反向代理。比如你有一个主域名,下面很多二级域名,你就可以在nginx做反向代理,每个二级域名对应一个web服务。但是用户最先都是请求80端口的。
下面是基本配置:
因为阿里云个的服务器刚开始有apache,为了不影响我们的安装,我们先把他卸载掉。
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo service apache2 stop
yban@iZwz9bq2dcwm9smklir3ntZ:~$ update-rc.d -f apache2 remove
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get remove apache
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get update
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get install nginx
yban@iZwz9bq2dcwm9smklir3ntZ:~$ cd /etc/nginx/conf.d
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi test-3000.conf
upstream test {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name 你的公网IP或网址(不含http或https);
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_pass http://test;
proxy_redirect off;
}
}
Esc
,输入冒号加wq!(:wq!
)回车保存退出yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo nginx -t
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo nginx -s reload
至此,nginx反向代理就开启了。当你在网页地址栏输入http://你的公网IP
的时候,就会将80端口的请求转接到3000端口。
yban@iZwz9bq2dcwm9smklir3ntZ:~$ cd /etc/nginx/nginx.conf
server_tokens off
,去掉前面的#
注释,保存yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo service nginx reload
https
是超文本加密传输协议,简而言之,https比http好在安全。而且现在google浏览器都把http协议的网址域名标记为不安全了。所以https是正规网址的标配了。
其实为我们的网址配置https并不麻烦,也不难。现在很多云服务厂商都提供免费的ssl证书。不过时间短,只有一年。但也够用了。
这里配置https的前提是你已经购买了一个域名,并且实名认证通过了。
配置https思路:
申请SSL证书:
我们在腾讯云上面申请亚洲诚信的SSL证书。
4. 点击【域名与网站】下的【SSL证书管理】
5. 点击【申请免费证书】
6. 选择免费的亚洲诚信证书,点确定
7. 填写相关信息,在【通用名称】中填写你的网址(全称),填写完成后下一步。
8. 域名认证,选择【手动DNS验证】
9. 到【域名解析】中添加相应的记录。
10. 复制【主机记录】和【记录值】到【域名解析】中。
10. 添加记录,保存。
11. 然后就等待CA机构验证
12. 验证成功,SSL证书申请成功。
Nginx配置Https:
nginx
的。home/yban/www/ssl
,本地存放目录是F:\下载\你申请的网址\Nginx
。每次传输一个,把下面的file替换成你的文件名。F:\下载\你申请的网址\Nginx> scp ./file [email protected]:/home/yban/www/ssl
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/nginx/conf.d/test-3000.conf
upstream test {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name 你申请的证书的域名;
#rewrite ^(.*) https://$host$1 permanent;
return 301 https://你申请证书的域名$request_uri;
}
server{
listen 443;
server_name 你申请证书的域名; #填写绑定证书的域名
ssl on;
ssl_certificate /home/yiban/www/ssl/1_你申请证书的域名_bundle.crt;
ssl_certificate_key /home/yiban/www/ssl/2_你申请证书的域名.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
if ($ssl_protocol = ""){
rewrite ^(.*) https://$host$1 permanent;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_pass http://test;
proxy_redirect off;
}
}
Esc
,输入冒号加wq!(:wq!
)回车保存退出。yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo nginx -t
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo nginx -s reload
至此,https申请和配置完成。当然,别忘了,这是一个前置服务,作为反向代理用的。你真正的服务还在其他地方。那些服务的端口,按照上面iptables(防火墙)的配置,是不能通过。除非,你的web服务也是通过80端口的。但是,和nginx抢位置可不好。在下面,我们会让防火墙允许其他端口的访问,比如3000端口。
node官方介绍:
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
非常简单地一句话。换句话说,你能够像在浏览器一样在服务器和本地电脑上运行js脚本。
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get update
node
之前,需要安装nvm
【Node Version Manager(Node版本管理器),用它可以方便的在机器上安装并维护多个Node的版本】。上github,搜索nvm
,进入该项目,下拉到安装步骤。复制过来代码,回车。yban@iZwz9bq2dcwm9smklir3ntZ:~$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
yban@iZwz9bq2dcwm9smklir3ntZ:~$ nvm install v10.15.1
yban@iZwz9bq2dcwm9smklir3ntZ:~$ nvm use v10.15.1
yban@iZwz9bq2dcwm9smklir3ntZ:~$ nvm alias default v10.15.1
yban@iZwz9bq2dcwm9smklir3ntZ:~$ npm --registry=https://registry.npm.taobao.org install -g npm
yban@iZwz9bq2dcwm9smklir3ntZ:~$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
yban@iZwz9bq2dcwm9smklir3ntZ:~$ npm --registry=https://registry.npm.taobao.org install -g cnpm
至此,node环境已经搭建完成。
编写脚本
app.js
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi app.js
const http = require('http');
const app = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type':'text/plain'});
res.end('This is a server');
});
app.listen(3000);
console.log('server running on http://localhost:3000');
Esc
,输入冒号加wq!(:wq!
)回车保存退出。yban@iZwz9bq2dcwm9smklir3ntZ:~$ node app.js
server running on http://localhost:3000
基于【3)测试Node服务是否开启】,我们执行下列步骤:
http://你的服务器公网ip地址
,访问服务器的80端口。但是,输入后一回车,会跑得很慢很慢,最后超时,显示不能访问。或者直接是503错误。确实,Nginx忠实地转发了我们的请求到3000端口,但是我们的防火墙不允许我们访问,所以我们要开启防火墙相应的端口。yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/iptables.up.rules
# test page
-A INPUT -s 127.0.0.1 -p tcp --destination-port 3000 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 3000 -m state --state ESTABLISHED -j ACCEPT
Esc
,输入冒号加wq!(:wq!
)回车保存退出。yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo iptables-restore < /etc/iptables.up.rules
至此,Node服务就能够在我服务器上跑起来,并且能够访问了。但是一个node app.js
是远远不够我们稳定地对外提供服务的,在后面,我们会讲到怎么用pm2持久运行Node服务。
看官网简介:
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
其实,相比于mysql,mongodb让我喜欢的是可扩展性。使用Json格式的数据,跟node可以很好的配合,取出来就能够马上使用。而mysql你还得提前建表。
下面是mongodb的安装步骤:
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
yban@iZwz9bq2dcwm9smklir3ntZ:~$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get update
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/apt/apt.conf
yban@iZwz9bq2dcwm9smklir3ntZ:~$sudo vi /etc/apt/sources.list.d/mongodb-org-4.0.list
deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/4.0 multiverse
为deb [ arch=amd64 ] https://mirrors.aliyun.com/mongodb/apt/ubuntu trusty/mongodb-org/4.0 multiverse
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get install -y mongodb-org
yban@iZwz9bq2dcwm9smklir3ntZ:~$ cat /var/log/mongodb/mongod.log
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/iptables.up.rules
-A INPUT -s 127.0.0.1 -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
Esc
,输入冒号加wq!(:wq!
)回车保存退出。yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo iptables-restore < /etc/ipdtables.up.rules
mongo
,进入数据库yban@iZwz9bq2dcwm9smklir3ntZ:~$ mongo
> 在这里输入mongodb命令
/etc/mongd.conf
下修改Mongodb的配置文件,比如把默认端口修改为其他端口,但是记得更改防火墙规则。sudo service mongod stop
sudo apt-get purge mongodb-org*
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
以上就是服务器上安装配置mongodb的操作。
看一下介绍
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
所以,这是一个key-value键值对数据库。redis通常在内存中储存数据。因为内存的读写速度非常快,所以,redis的读写速度也非常快。通常,在web应用中,我们会拿redis作为session持久化的解决方案。
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get update
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get install redis-server
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo redis-server /etc/redis/redis.conf
yban@iZwz9bq2dcwm9smklir3ntZ:~$ redis-cli
127.0.0.1:6379> 输入redis命令
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/iptables.up.rules
-A INPUT -s 127.0.0.1 -p tcp --destination-port 6379 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -d 127.0.0.1 -p tcp --source-port 6379 -m state --state ESTABLISHED -j ACCEPT
Esc
,输入冒号加wq!(:wq!
)回车保存退出。yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo iptables-restore < /etc/ipdtables.up.rules
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo vi /etc/redis/redis.conf`
yban@iZwz9bq2dcwm9smklir3ntZ:~$ ps -aux|grep redis
yban@iZwz9bq2dcwm9smklir3ntZ:~$ netstat -nlt|grep 6379
简而言之
MySQL 是最流行的关系型数据库管理系统
所以服务器上就算是不用也安装一个,以防不时之需
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get update
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get install mysql-server
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo mysql_install_db
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo mysql_secure_installation
yban@iZwz9bq2dcwm9smklir3ntZ:~$ mysql -u root -p 你的密码或者为空
mysql >
// 删除mysql的数据文件
sudo rm /var/lib/mysql/ -R
//删除mqsql的配置文件
sudo rm /etc/mysql/ -R
//自动卸载mysql的程序
sudo apt-get autoremove mysql* --purge
sudo apt-get remove apparmor
看介绍
PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。
PHP 是免费的,并且使用非常广泛。同时,对于像微软 ASP 这样的竞争者来说,PHP 无疑是另一种高效率的选项。
其实php文件里面可以完全是html和javascript,不过作为一个动态脚本,就可以运行在服务器上向外提供服务了。
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get update
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo apt-get install php5-fpm php5-mysql
;cgi.fix_pathinfo=0
,去除分号,并且设置为0,因为这个配置在默认下会让用户执行强制执行Php脚本。这不安全。yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo nano /etc/php5/fpm/php.ini
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo service php5-fpm restart
yban@iZwz9bq2dcwm9smklir3ntZ:~$ sudo nano /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
server_name server_domain_name_or_IP;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
sudo nano /usr/share/nginx/html/info.php
,测试代码如下
phpinfo();
?>
http://你的服务器ip地址/info.php
能够看到php信息也就是成功了。测试完成后记得把测试文件删除。JDK就是java的开发工具包,也是环境包,跑Java虚拟机,javac编译器都要用到的。你要在服务器上用java脚本提供web服务,那么JDK必不可缺。通常我用jdk8。
sudo tar -xf 文件名 -C 解压的文件夹路径
sudo vi /etc/profile
配置相应的环境变量,增加下面语句JAVA_HOME=/usr/lib/jvm/jdk1.8.0_131# 这里是相应的文件路径
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH
source /etc/profile
刷新java -version
和javac -version
有出现相应信息就是成功了Tomcat说白了就是以java为脚本的web服务器。你要用java提供web服务,一定少不了Tomcat。
/usr/local/tomcat
最好是把文件命名为tomcatsudo mv tomcat-xxxx tomcat
1. cp -p /usr/local/tomcat/bin/catalina.sh /etc/init.d/tomcat
2. vim /etc/init.d/tomcat
增加下面语句
JAVA_HOME=/usr/local/jdkxxxx/#对应文件路径
CATALINA_HOME=/usr/local/tomcat
chmod 755 /etc/init.d/tomca
update-rc.d –f tomcat defaults
service tomcat start
ps aux |grep tomcat
curl http://localhost:8080
默认是8080,如果你想修改为80,则需要修改server.xml文件。
找到
cd /usr/local/tomcat/conf/
vim server.xml
找到,下一行插入新的,内容如下:
<Host name="www.example.cn" appBase="/data/tomcatweb"
unpackWARs="false" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="./" debug="0" reloadable="true" crossContext="true"/>
完成后,重启tomcat
service tomcat stop; service tomcat start
测试新建的虚拟主机,首先需要修改你电脑的hosts文件
vim /data/tomcatweb/test.jsp
加入以下内容:
<html><body><center>
Now time is: <%=new java.util.Date()%>
center>body>html>
保存后,在你的浏览器里输入 http://www.example.cn/test.jsp
看是否访问到如下内容:
Now time is: Thu Jun 02 14:32:34 CST 2011
上面的test.jsp就是要显示当前系统的时间。
本来还想写关于PM2一键部署Node项目的。但是觉得跟题目不搭边就另开一篇吧。还有配置服务器的同时,还需要申请域名和实名认证,备案。这些没有写上去。但是阿里云上有相关的文档,这里就不再赘述了。
如果要提供web服务的话,光是配置好生产环境是远远不够的。这个以后再说。
最后祝各位身体健康。