從0到1實現簡單部署

對於目前的我的開發者而言,使用雲服務器是十分方便快捷的,在興沖沖地寫好了項目代碼後,會有一種想要快速部署到服務器上的衝動,今天咱們就來實踐一下 0 到 1 的簡單服務器部署。html

首先你須要有一臺雲服務器,這裏以個人阿里雲服務器爲例,系統是CentOS 7.3前端

1.遠程鏈接

想要在服務器上進行部署,首先得鏈接上服務器,能夠經過阿里雲官網控制的 瀏覽器遠程鏈接 登陸服務器,可是比較麻煩,每隔一段時間都須要從新登陸。除此以外,還能夠利用 ssh 經過帳號密碼或者密鑰進行鏈接,以下:nginx

# 經過帳號密碼進行鏈接,通常爲 root,鏈接成功後須要輸入密碼
ssh root@yourIp

# 經過密鑰進行鏈接,yourKey 爲密鑰的本地路徑
ssh root@yourIp -i yourKey

2.nginx 配置

如今的服務器部署,基本上離不開 nginx,配置簡單易用,對於我的開發者十分友好。瀏覽器

2.1 nginx 安裝

yum install -y nginx

安裝成功後可使用 -v 查看版本,我這裏是 1.16.1服務器

nginx -v

2.2 nginx 命令

啓動 nginx

可使用 Linux 的系統工具 Systemd 來啓動 nginx,也可使用 nginx 自帶的命令:session

systemctl start nginx
# 或
nginx

# 設置開機自動啓動
systemctl enable nginx

中止 nginx

當你想中止 nginx 時,可使用 stop 命令:ssh

systemctl stop nginx
# 或
nginx -s stop

重啓 nginx

當你更改了 nginx 的配置時,這個時候每每須要重啓 nginx 服務配置才能生效:工具

systemctl restart nginx
# 或
nginx -s reload

2.3 配置 nginx

nginx 安裝好了以後,默認路徑通常是 /etc/nginx/,若是在該路徑下沒有找到,可使用 nginx -t 命令查看安裝路徑:post

nginx -t
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful

這裏驗證的 nginx.conf 就是 nginx 的主配置文件,默認內容以下:阿里雲

# 部分配置已省略
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

這裏咱們主要關注一下 server 的配置,以 http 協議的 server 爲例,逐行解析一下:

  • listen:表示監聽 IPV4 & IPV6 的 80 端口,且將該端口設置爲默認服務
  • server_name:表示當前的服務對應的名稱(IP 或者 URL)
  • root:表示根路徑
  • include:表示引用該路徑下的配置,這裏能夠忽略
  • location:表示域名後的路徑對應的規則
  • error_page:表示出現錯誤以後的重定向規則

前端項目

對於前端項目,本質上打包以後是一堆靜態文件,配置對應的 server_name 和 root 就能夠了,這裏以配置域名爲 www.example.com,打包後 dist 下的文件存放服務器目錄爲 /home/admin/www 爲例:

# 部分配置已省略
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  www.example.com;
    root         /home/admin/www;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

服務端項目

對於服務端項目,會在本地監聽一個端口來運行相關的服務,能夠利用 nginx 配置反向代理,使被訪問服務反向代理到對應的端口,這裏以 3000 端口爲例:

# 部分配置已省略
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  www.example.com;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
      proxy_pass http://127.0.0.1:3000;
    }
}
配置更改以後須要重啓一下 nginx 服務才能生效

3.上傳文件

上傳文件的方式也比較多,這裏主要介紹 scp 命令,以遠程服務器用戶爲 root@192.168.0.1 爲例:

# 將遠程服務器的 /remote/index.html 文件,下載到本地 /local 目錄下
scp root@192.168.0.1:/remote/index.html /local

# 將遠程服務器的整個 remote 目錄,下載到本地 /local 目錄下
scp -r root@192.168.0.1:/remote/ /local

# 將本地 /local/index.html 文件,上傳到遠程服務器的 /remote 目錄下
scp /local/index.html root@192.168.0.1:/remote

# 將本地的整個 /local 目錄,上傳到遠程服務器的 /remote 目錄下
scp -r /local root@192.168.0.1:/remote

對於前端項目而言,如果想上傳 dist 目錄下的全部文件,但又不想上傳 dist 目錄,這個時候可使用 通配符 來上傳全部文件:

# 將本地的整個 /local 目錄下的全部文件,上傳到遠程服務器的 /remote 目錄下
scp -r /local/* root@192.168.0.1:/remote

在上傳前須要確保服務器的目錄具備正確的讀寫權限,不然會出現 SCP Permission denied 錯誤,具體的文件權限能夠經過 ls -l 查看:

ls -l
# -rw-r--r-- 1 root root  2376 Feb 17 20:37 404.html
# drwxr-xr-x 2 root root  4096 Feb 17 00:43 about
# drwxr-xr-x 4 root root  4096 Feb 17 00:43 assets
# drwxr-xr-x 2 root root  4096 Feb 17 00:43 atlas
# -rw-r--r-- 1 root root 51022 Feb 17 20:37 head.png
# -rw-r--r-- 1 root root 13927 Feb 17 20:37 index.html
# drwxr-xr-x 8 root root  4096 Feb 17 00:43 posts

其中第二列表示文件權限,首字母爲文件類型,d 表示目錄文件,- 表示普通文件,後面的 rwx 表示 讀/寫/執行 權限,每三個一組,分別對應 擁有者/羣組/其餘組

如若沒有權限,能夠經過下面的命令來設置全部人可讀寫以及執行:

chmod 777 yourDir

4.https 配置

將你的站點配置爲 https 須要下面幾個步驟:

  1. 申請證書並下載。例如在阿里雲的 SSL證書 模塊中能夠申請免費證書,期限一年
  2. 將證書文件上傳到服務器的對應目錄
  3. 更改 nginx 配置

ssl_certificatessl_certificate_key 分別表示證書文件和私鑰的存放路徑,示例以下:

# 部分配置已省略
server {
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    server_name  www.example.com;
    root         /home/admin/www;

    ssl_certificate "/etc/pki/nginx/www.example.com.pem";
    ssl_certificate_key "/etc/pki/nginx/private/www.example.com.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}

當部署 https 站點時,常見的需求是將 http 站點自動跳轉到 https,nginx 配置以下:

server {
    listen      80;
    server_name example.com www.example.com;
    return 301  https://$server_name$request_uri;
}

以上就是本篇的所有內容,若有錯誤,歡迎指正~

相關文章
相關標籤/搜索