作前端兩年了,對服務端所知甚少,一直想學習一些服務端的知識。學習了一些服務端語言後,我打算從本身創建一個線上網站開始本身的服務端實踐之路。html
你們可能使用的 Web 框架,域名服務商和雲計算服務商不同,但上面的思路是通用的。前端
首先註冊並登陸 aws 帳號,以後進到 EC2 服務的主頁。像下面這樣,點擊紅色區域的「Launch Instance」,開始創建實例。 node
點擊後會進到選擇主機模板的頁面,我選的是 Ubuntu, 以下圖。 點擊後選擇主機配置,默認選擇免費的那一款,而後點擊「Review and Launch」,以下。 點擊「Lunch」。 點擊後會彈窗提示讓咱們建立一對祕鑰,後期當咱們用 ssh 遠程登陸咱們的主機時,咱們須要這樣一對祕鑰做爲登陸憑證。選擇「Create a new key pair」,對它進行命名,而後下載到本地保存好。作完這些後,在頁面中點擊「Lunch Instance」ssh -i ~/.ssh/ubuntu_key_pair.pem ubuntu@3.16.85.11
python
注意,上面的命令中,-i 後面跟的是你的主機祕鑰的路徑。最後的 ubuntu@3.16.85.11 中,3.16.856.11 是咱們主機的靜態 IP,ubuntu 是主機中的用戶名。選擇 ubuntu 系統做爲主機模板的,默認是這個用戶名。鏈接成功後以下圖示 linux
沒有意外的話,你如今能夠操做本身的主機了!🎉ssh 鏈接到遠程主機後,執行下列命令安裝 Nginx。nginx
sudo wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
git
wget 是 Linux 系統中下載文件的軟件工具。apt 是 Linux 系統中的軟件管理包。這一步大概是將 Nginx 的簽名添加到 apt 的簽名庫中。防止安裝時沒有權限。github
sudo nano /etc/apt/sources.list
web
將下面兩行添加到文件底部。express
deb http://nginx.org/packages/ubuntu xenial nginx
deb-src http://nginx.org/packages/ubuntu xenial nginx
source.list 文件記錄了 apt 安裝與更新軟件的地址。這一步至關於告訴 apt 從哪裏安裝 Nginx。 保存 source.list 文件,而後執行下面的命令
sudo apt-get update
sudo apt-get install nginx
這一步是安裝 Nginx。
sudo service nginx start
這一步是啓動 Nginx
關於在 Linux 下安裝 Nginx 的更多內容能夠參考這裏
完成上面的操做後,在瀏覽器中訪問咱們的靜態 IP,能夠看到下面的頁面。
到這一步咱們可使用靜態 IP 訪問咱們的網頁了。可是在瀏覽器中輸入 IP 地址來訪問咱們的網頁一點都不酷。下面咱們要讓以前購買的域名派上用場。
進入到 aws Route 53 控制檯。選擇 「Hosted zones」選項頁
若是你在 Chrome 瀏覽器中訪問你的域名,他有可能會提示「此網站沒法提供安全鏈接」,緣由是 Chrome 強制用 HTTPS 訪問全部的域名。如今市面上全部的網站都是 HTTPS 的,沒有進行安全加密的已經不多了。咱們能夠經過下面簡單的幾步操做爲本身的網站啓用 HTTPS。 ssh 鏈接到遠程主機後,執行下面一系列命令。
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
上面這堆命令看起來很複雜,我也不是很明白。我簡單的理解爲安裝 Cerbot 軟件。
下面咱們須要修改一下咱們的 Nginx 配置。
sudo nano /etc/nginx/conf.d/default.conf
將 「server_name」中的 「localhost」替換成你的域名。像下面這樣。
sudo certbot --nginx -d zangjiabin.me
成功後,你就能夠用 HTTPS 訪問你的域名了
最後,咱們須要開始創建咱們的 web 服務。
首先修改 Nginx 配置,像下面這樣,將其中的4個域名換成你的域名。
#
server {
listen 80;
listen [::]:80;
server_name zangjiabin.me;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name zangjiabin.me;
location / {
proxy_pass http://localhost:3000;
}
ssl_certificate /etc/letsencrypt/live/zangjiabin.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/zangjiabin.me/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 1h;
add_header Strict-Transport-Security "max-age=15768000" always;
}
#
如圖:
sudo nginx -s reload
上面的配置文件,主要的意思是將全部的 HTTP 請求轉爲 HTTPS 請求,而後全部的請求最後都會被轉發到本地的 localhost:3000 服務上。也就是說咱們的 Web 服務最終將運行在 localhost:3000 上。
下面咱們將在 loalhost:3000 上創建咱們的 Web 服務。
執行下面兩個操做創建咱們的工做目錄。
mkdir /home/ubuntu/app
cd /home/ubuntu/app
安裝 Node.js 版本管理工具 nvm。
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash
. ~/.nvm/nvm.sh
安裝成功後,執行
nvm ls-remote --lts
查看最近的長期支持版本。而後安裝該版本 Node.js
nvm install v8.12.0
執行下面的代碼安裝 express-generator 用來生成 express 應用。
npm install express-generator -g
Express 是基於 Node.js 開發的一款 Web 框架。執行下面的代碼生成 Express 應用。
express myapp
cd myapp
npm install
npm run start
這樣啓動的服務有一個問題就是不能關閉當前的界面,一旦關閉服務就終止了,咱們應該設法讓 Node 服務在後臺運行。
npm install forever -g
forever start bin/www
此時訪問你的域名,會看到 Express 的默認頁面