首先說一下阿里云購買的服務(wù)器centos和ubuntu都是linux的不同發(fā)行版的操作系統(tǒng)。它們通常包括了其他的系統(tǒng)軟件和應(yīng)用軟件,以及一個用來簡化系統(tǒng)初始安裝的安裝工具,和讓軟件安裝升級的集成管理器。發(fā)行版為許多不同的目的而制作, 包括對不同計算機結(jié)構(gòu)的支持, 對一個具體區(qū)域或語言的本地化,實時應(yīng)用,和嵌入式系統(tǒng),甚至許多版本故意地只加入免費軟件。目前,超過三百個發(fā)行版被積極的開發(fā),最普遍被使用的發(fā)行版有大約十二個.
下面是在阿里云ubuntu_18_04操作系統(tǒng)下的ECS部署nginx+node+pm2+mysql+https
【1】搭建nodejs環(huán)境
新服務(wù)器首先更新源,更新apt-get;注意:阿里云Ubuntu服務(wù)器進入系統(tǒng)后的默認文件夾是/root,個人建議先進入/root文件夾的上層文件夾后再進行下面的操作,輸入cd ..回車
sudo apt-get update
安裝curl,用來下載資源
sudo apt-get install -y curl
下載node安裝腳本,node自己提供了源我安裝的是10.x版本
sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
安裝node
sudo apt-get install nodejs
查看node和npm 是版本
node -v
npm -v
【2】安裝Nginx
定源碼目錄,原則上可以是任何目錄。這里我選擇/usr/local/src
cd /usr/local/src
安裝PCRE庫,zlib庫,ssl(某些vps默認沒裝ssl)
sudo apt-get install libpcre3 libpcre3-dev libpcrecpp0v5 libssl-dev zlib1g-dev
安裝Nginx
解壓并進入目錄,編譯和安裝
cd /usr/local/src
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar -zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure
sudo make
sudo make install
我的nginx的源碼目錄/usr/local/src/nginx-1.14.2;我的nginx的安裝目錄/usr/local/nginx
查看端口狀態(tài)
netstat -ano|grep 80
啟動Nginx
sudo /usr/local/nginx/sbin/nginx
如果報錯:[emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
則意味80端口被占用命令:fuser -k 80/tcp 然后在啟動即可
打開瀏覽器訪問機器的IP,出現(xiàn)Welcome to nginx!
【3】安裝Mysql(在根目錄安裝即可)
sudo apt-get install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev
這個版本安裝完了沒有提示設(shè)置密碼或其他配置項的步驟
檢測是否安裝成功
sudo netstat -tap | grep mysql
重啟mysql命令
service mysql restart
(1)阿里云控制臺打開3306端口
控制臺-實例-操作(更多)-網(wǎng)絡(luò)和安全組-安全組配置-內(nèi)網(wǎng)入方向全規(guī)則-添加3306數(shù)據(jù)庫端口
(2)注釋掉 bind-address = 127.0.0.1這一行
/etc/mysql/mysql.conf.d/mysqld.cnf里面
(3)打開遠程連接權(quán)限
有兩種方法任選其一即可( 我用的第一種)
1.改表法
# 登錄mysql
mysql -u root -p
#進入mysql模式
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
# 刷新數(shù)據(jù)庫配置
flush privileges;
2.授權(quán)法
如果你想允許用戶myuser從ip為192.168.1.6的主機連接到mysql服務(wù)器,并使用mypassword作為密碼
GRANT ALL PRIVILEGES ON . TO 'myuser'@'192.168.1.3'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
或者允許從任何主機連接到mysql數(shù)據(jù)庫。
grant all privileges on . to 'root'@'%' identified by 'pwd' with grant option;
flush privileges;
(4)修改數(shù)據(jù)庫root賬號的密碼
update mysql.user set authentication_string=password("新密碼") where user="root";
update mysql.user set plugin="mysql_native_password" where user="root";
#退出數(shù)據(jù)庫
quit;
(5)然后重啟mysql讓配置生效,就可以用工具鏈接數(shù)據(jù)庫了
sudo service mysql restart
【4】部署項目上傳項目
我使用ftp上傳項目到目錄 /usr/local/deployment里deployment自己創(chuàng)建的
記得修改下線上數(shù)據(jù)庫的信息為正確的
【5】安裝pm2并啟動nodejs項目
#使用npm全局安裝pm2
npm install -g pm2
#進入nodejs項目目錄,項目在/usr/local/deployment/interstellarmuseum
cd /usr/local/deployment//interstellarmuseum
#后臺啟動項目
pm2 start server.js
#檢查nodejs項目是否啟動
pm2 list
pm2常用指令
http://www.lxweimin.com/p/b7416eaefde0
然后修改nignx配置讓域名可以訪問到
/usr/local/nginx/conf/nginx.conf里面把http下面的第一個server替換為下面
server {
listen 80;
server_name www.interstellarmuseum.org;#域名
location / {
#node.js應(yīng)用的端口
proxy_pass http://127.0.0.1:3000;
root /usr/local/deployment/interstellarmuseum;
}
}
至此就可以通過域名訪問你的網(wǎng)站了
【6】給域名添加HTTPS
(1)在阿里云控制臺-實例-操作(更多)-網(wǎng)絡(luò)和安全組-安全組配置-內(nèi)網(wǎng)入方向全規(guī)則-添加443端口因為https使用的加密SSL通道,默認使用443端口
(2)阿里云搜索SSL進入點擊購買阿里云新版本免費證書一年按下圖設(shè)置, 按要求申請通過后把里面兩個密鑰文件放到/usr/local/nginx/conf里面修改下訪問權(quán)限,/usr/local/nginx/conf/cert后面用
(3)給nginx安裝ssl模塊(因為我一開始安裝的nginx默認是不帶ssl模塊的)
我的nginx的源碼目錄/usr/local/src/nginx-1.14.2;我的nginx的安裝目錄/usr/local/nginx
#在nginx的源碼目錄/usr/local/src/nginx-1.14.2安裝ssl模塊
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
#編譯重新生成nginx包,千萬不要make install 否則會覆蓋現(xiàn)有的nginx
make
(4)然后備份原有已經(jīng)安裝好的不帶ssl模塊的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
(5)停止Nginx
/usr/local/nginx/sbin目錄執(zhí)行命令停止nginx服務(wù)
./nginx -s stop 或者nginx -s stop
或者任意目錄執(zhí)行
sudo /usr/local/nginx/sbin/./nginx -s stop
(6)將剛剛編譯好的帶有ssl模塊的nginx覆蓋掉原有的nginx
#在nginx的源碼目錄/usr/local/src/nginx-1.14.2執(zhí)行
cp ./objs/nginx /usr/local/nginx/sbin/
(7)修改nginx.conf添加https并且設(shè)置跳轉(zhuǎn),使http請求通過301 redirect到https上去。不管你輸入的是不是帶https的域名或者直接輸入域名都跳轉(zhuǎn)到s上
#下面是完整的nginx.conf配置把里面的“你的域名”修改為你的域名即可
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name 你的域名;
return 301 https://$server_name$request_uri;
}
# HTTPS server
server {
listen 443 ssl;
server_name 你的域名;
#https開始
ssl_certificate cert/3894672_你的域名.pem;
ssl_certificate_key cert/3894672_你的域名.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#https結(jié)束
location / {
#node.js應(yīng)用的端口
proxy_pass http://127.0.0.1:3000;
root /usr/local/deployment/interstellarmuseum;
}
}
}
(8)啟動nginx
進入/usr/local/nginx/sbin目錄執(zhí)行命令
./nginx
#或者重新加載nginx
./nginx -s reload
或者任意目錄執(zhí)行
sudo /usr/local/nginx/sbin/nginx
如果報錯:[emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
則意味80端口被占用命令:fuser -k 80/tcp 然后在啟動即可
之后便可以http和https都可以訪問了
【7】開啟服務(wù)器的防火墻提高服務(wù)器的安全性
#查看防火墻狀態(tài) 命令-開啟:Status: active關(guān)閉:Status: inactive
ufw status
#開啟防火墻
ufw enable
#關(guān)閉防火墻
ufw disable
#之后再只允許下面的端口訪問
ufw allow 80
ufw allow 9200
ufw allow 8080
ufw allow 3306
ufw allow 443
ufw allow 22