前言
昨天更新了四篇博客,我們順利的 安裝了 ubuntu server 服務器,并且配置好了 ssh 免密登錄服務器,安裝好了 服務器常用軟件安裝, 配置好了 zsh 和 vim 以及 通過 NVM 安裝好Nodejs,還有PNPM包管理工具 。
作為服務器的運行,一定少不了 Nginx 這款提供 HTTP 和反向代理的的 Web 服務器軟件。在數據庫方面,MySQL 是我們最常用的數據庫軟件,今天,我們就來安裝和配置這兩款我們所需要的服務。
安裝 Nginx
首先,我們通過終端登錄服務器,然后開始執行如下命令
# 更新軟件源列表
sudo apt update
# 升級已有軟件包
sudo apt upgrade -y
## 上面兩步建議過一段時間或者在安裝新的軟件之前要執行一下。
## 因為我們昨天執行過,并非一定要執行。# 安裝 Nginx
sudo apt install nginx -y
# 啟動 Nginx 服務
sudo systemctl start nginx
# 將 Nginx 服務設置為開機啟動
sudo systemctl enable nginx
# 驗證 Nginx 啟動狀態
sudo systemctl status nginx
通過上面的命令,我們已經順利安裝好了 Nginx,下圖就是 Nginx 的運行狀態。
然后,我們通過訪問 http://192.168.8.7 這個內網 IP,就可以看到已經正常運行了。
Nginx 的一些常用配置
Nginx 的配置是一個非常復雜的事情,想要詳細的了解,可以參考它的官方網站的文檔:https://nginx.org/en/docs/
我這邊只提幾個咱們前端經常用到的配置。
首先,配置文件位于 /etc/nginx/nginx.conf
這里。我們直接編輯這個文件即可。
Linux 下,大多數的軟件的配置文件都在 /etc 目錄下。
# 定義 Nginx 工作進程的運行用戶為 www-data 賬戶
user www-data;
# 設置工作進程數量為 auto(自動匹配 CPU 核心數,優化性能)
worker_processes auto;
# 指定錯誤日志存儲路徑為
error_log /var/log/nginx/error.log;
# 記錄主進程 ID 的存儲位置(用于服務管理
pid /run/nginx.pid;# 引入一些模塊的配置文件.
include /usr/share/nginx/modules/*.conf;# 設置單個工作進程的最大并發連接數為 1024
events {worker_connections 1024;
}## 以上配置我加了注釋,但一般情況下,保持默認即可,不需要調整http {# 定義日志的格式,可根據情況自行調整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 /var/log/nginx/access.log main;# 啟用零拷貝文件傳輸(減少內核態與用戶態數據拷貝)sendfile on;# 優化 TCP 數據包發送策略tcp_nopush on;# 禁用 Nagle 算法,降低小數據包傳輸延遲tcp_nodelay on;# 設置 Keep-Alive 連接超時為 65 秒keepalive_timeout 65;# 擴展 MIME 類型哈希表大小,提升處理性能types_hash_max_size 2048;# 加載預定義的 MIME 類型映射文件include /etc/nginx/mime.types;# 默認響應類型為二進制流(未識別類型時使用)default_type application/octet-stream;# 限制客戶端請求體最大為 20MB (上傳文件大小控制)client_max_body_size 20M;# 引入一些模塊的配置文件include /etc/nginx/conf.d/*.conf;## 以上是一些基本的配置,可以按需調整# server 是一個站點的配置# 每一個 server 可以處理一個特定的服務## 下面第一個站點的配置server {# 監聽 80 端口listen 80 default_server;# 監聽 ipv6 的 80 端口listen [::]:80 default_server;# 第一個站點配置的域名,多個域名用空格分隔,末尾要有分號server_name fungleo.com www.fungleo.com;# 網站文件目錄(我這個配置沒用到,保持了默認)root /usr/share/nginx/html;# 加載一些配置文件,我沒管.include /etc/nginx/default.d/*.conf;# 訪問域名根的時候,反向代理到 3888 端口的服務# 這也是為什么上面的網站文件目錄我說我沒用到的原因location / {proxy_pass http://127.0.0.1:3888;}# 將 /api 反向代理到 3000 端口的 /apilocation ^~ /api {proxy_pass http://127.0.0.1:3000/api;}# 將 /upfile 反向代理到 3000 端口的 /upfilelocation ^~ /upfile {proxy_pass http://127.0.0.1:3000/upfile;}# 將 /user 指向到了 /srv/web-site/fungleo/user-fe 目錄# 這是一個用 vue 開發的 spa 類型的項目location /user {alias /srv/web-site/fungleo/user-fe;# 由于該項目入口是 index.html 文件,# 所以如果訪問 /user/love 這樣的路徑會找不到文件# 所以,要將所有的請求指向到 index.html 文件# 參考文檔 https://router.vuejs.org/zh/guide/essentials/history-mode#nginxtry_files $uri $uri/ /user/index.html;}# 異常錯誤配置error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}# 第二個站點的配置server {server_name manage.fungleo.com;# 域名根配置location / {# 文件目錄root /srv/web-site/fungleo/manage-fe;# 默認首頁文件index index.html Index.html;# 和上面一樣try_files $uri $uri/ /index.html;}# 下面是兩個反向代理,不重復注釋了。location ^~ /api {proxy_pass http://127.0.0.1:3000/api;}location ^~ /upfile {proxy_pass http://127.0.0.1:3000/upfile;}}
}
由于我們搞服務器,只是內網測試使用,真正部署生產,還是交給運維比較穩妥,所以,我這里沒有講 ssl 的內容。
如果要深入這一部分,可以去 https://github.com/acmesh-official/acme.sh/ 這里,有全套的解決方案和文檔。
安裝 Mysql
目前很流行 Docker 安裝,也比較簡單。只是現在國內由于網絡的一些特殊原因,速度比較慢。所以,我這邊還是使用正常的安裝方式。
# 安裝 Mysql
sudo apt install mysql-server -y
# 啟動 Mysql
sudo systemctl start mysql
# 設置 Mysql 服務開機自啟
sudo systemctl enable mysql
# 驗證 Nginx 啟動狀態
sudo systemctl status mysql
Mysql 配置
通過上面的命令,我們已經順利安裝好了 Mysql,下面要對 Mysql 進行一些初始設置,我們運行 sudo mysql_secure_installation
命令開始。
# Mysql 初始設置命令
sudo mysql_secure_installation
# 返回如下內容,問你是否開啟高密碼驗證,我們輸入 YSecuring the MySQL server deployment.Connecting to MySQL using a blank password.VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?Press y|Y for Yes, any other key for No:# 輸入 Y 以后,又返回了如下內容,我們輸入 2 選擇最強
There are three levels of password validation policy:LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary filePlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:# 告訴我們,沒有為 Root 用戶設置密碼,如果需要設置,可以使用 "ALTER_USER" 命令設置。
# 默認 root 用戶使用 auth_socket 方式登錄
Skipping password set for root as authentication with auth_socket is used by default.
If you would like to use password authentication instead, this can be done with the "ALTER_USER" command.
See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-user-password-management for more information.By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.# 是否刪除 anonymous 用戶,我們輸入 Y
Remove anonymous users? (Press y|Y for Yes, any other key for No) :Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.# 是否禁止 root 用戶遠程登錄,我們輸入 Y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :# 是否刪除測試數據庫,我們輸入 Y
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.Remove test database and access to it? (Press y|Y for Yes, any other key for No) :# 是否重載權限表 ,我們輸入 Y- Dropping test database...
Success.- Removing privileges on test database...
Success.Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.Reload privilege tables now? (Press y|Y for Yes, any other key for No) :# 告訴我們成功了,全部干完。
Success.All done!
命令行連接 Mysql 服務
好,Mysql 已經配置成功了。接下來,我們登錄看一下
# 因為采用 auth_socket 方式登錄,因此無需密碼
sudo mysql -u root
沒有密碼,直接采用系統用戶登錄,還是感覺到不太方便,所以,我們設置一下密碼
設置 Mysql root 用戶密碼
# 設置密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的強密碼';
# 刷新權限
FLUSH PRIVILEGES;
用 Navicat 連接 Mysql 服務
Navicat 是一款非常好用的數據庫軟件。在以往,我們經常使用它的破解版,但是現在,官方已經放出了 Navicat Premium Lite 版本的免費版,因此,大家就不要找破解版了。
根據我的試用,其免費版是足夠我們日常開發使用的,并且,它是完全支持 Mac、Windows、Linux 全平臺的,因此我強烈推薦哦!
官網介紹以及下載地址:https://www.navicat.com/en/products/navicat-premium-lite
我們在本機打開 Navicat 軟件,新建 Mysql 連接,打開如下圖的面板:
在面板中,我們填寫基礎信息。然后點擊 SSH 標簽,然后按照下圖進行設置:
通過配置 SSH 隧道,就可以正常連接 MySQL 數據庫了。如下圖所示,已經順利登錄了。
小結
通過這篇文章,我相信各位看官已經基本掌握了 Nginx 和 Mysql 的安裝和基本的設置和連接了。
我的以配置 Ubuntu Server 的 NodeJS 服務器為主題的系列文章,目前已經完成六篇,大家喜歡的話,一定要多多點贊收藏,評論留言,關注我哦!謝謝大家!
大概目錄如下:
《PVE虛擬機 安裝 Ubuntu Server 系統》
《SSH 配置,讓我們遠程連上虛擬機》
《服務器軟件更新,以及常用軟件安裝》
《配置服務器終端環境 zsh , oh my zsh, vim》
《NVM 安裝 NodeJS環境,以及 PNPM 的安裝》
《Nginx 和 Mysql 的安裝和配置》
《pm2 服務端進程管理的使用和配置》