安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6

前言

昨天更新了四篇博客,我们顺利的 安装了 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 的运行状态。
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,下面要对 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
没有密码,直接采用系统用户登录,还是感觉到不太方便,所以,我们设置一下密码

设置 Mysql root 用户密码

# 设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码';
# 刷新权限
FLUSH PRIVILEGES;

设置 Mysql Root 用户密码

用 Navicat 连接 Mysql 服务

Navicat 是一款非常好用的数据库软件。在以往,我们经常使用它的破解版,但是现在,官方已经放出了 Navicat Premium Lite 版本的免费版,因此,大家就不要找破解版了。

根据我的试用,其免费版是足够我们日常开发使用的,并且,它是完全支持 Mac、Windows、Linux 全平台的,因此我强烈推荐哦!

官网介绍以及下载地址:https://www.navicat.com/en/products/navicat-premium-lite

我们在本机打开 Navicat 软件,新建 Mysql 连接,打开如下图的面板:
填写 Mysql 服务基础信息
在面板中,我们填写基础信息。然后点击 SSH 标签,然后按照下图进行设置:

连接 MYSQL 的 SSH 设置

通过配置 SSH 隧道,就可以正常连接 MySQL 数据库了。如下图所示,已经顺利登录了。
成功连接 Mysql 数据库

小结

通过这篇文章,我相信各位看官已经基本掌握了 Nginx 和 Mysql 的安装和基本的设置和连接了。

我的以配置 Ubuntu Server 的 NodeJS 服务器为主题的系列文章,目前已经完成六篇,大家喜欢的话,一定要多多点赞收藏,评论留言,关注我哦!谢谢大家!

大概目录如下:

《PVE虚拟机 安装 Ubuntu Server 系统》
《SSH 配置,让我们远程连上虚拟机》
《服务器软件更新,以及常用软件安装》
《配置服务器终端环境 zsh , oh my zsh, vim》
《NVM 安装 NodeJS环境,以及 PNPM 的安装》
《Nginx 和 Mysql 的安装和配置》
《pm2 服务端进程管理的使用和配置》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/bicheng/83542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙版Taro 搭建开发环境

鸿蒙版Taro 搭建开发环境 一、配置鸿蒙环境 下载安装 DevEco 建议使用最新版本的 IDE,当前为 5.0.5Release 版本。 二、创建鸿蒙项目 打开 DevEco,点击右上角的 Create Project,在 Application 处选择 Empty Ability,点击 Ne…

Could not get unknown property ‘mUser‘ for Credentials [username: null]

最近遇到jekins打包报错: Could not get unknown property mUser for Credentials [username: null] of type org.gradle.internal.credentials.DefaultPasswordCredentials_Decorated。 项目使用的是gradle,通过pipeline打docker包;因为ma…

Spring Boot + MyBatis-Plus 读写分离与多 Slave 负载均衡示例

Spring Boot + MyBatis-Plus 读写分离与多 Slave 负载均衡示例 一、项目结构 src/main/java/com/example/demo/ ├── config/ │ ├── DataSourceConfig.java # 数据源配置 │ ├── MyBatisPlusConfig.java # MyBatis-Plus配置 ├── constant/ │…

android binder(1)基本原理

一、IPC 进程间通信(IPC,Inter-Process Communication)机制,用于解决不同进程间的数据交互问题。 不同进程之间用户地址空间的变量和函数是不能相互访问的,但是不同进程的内核地址空间是相同和共享的,我们可…

高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”

一、高密爆炸:一声巨响,撕开化工安全“伤疤” 2025年5月27日,山东高密友道化学有限公司的车间爆炸声,像一把利刃划破了化工行业的平静。剧烈的冲击波将车间夷为平地,黑色蘑菇云腾空而起,刺鼻的化学气味弥漫…

双擎驱动:华为云数字人与DeepSeek大模型的智能交互升级方案

一、技术融合概述 华为云数字人 华为云数字人,全称:数字内容生产线 MetaStudio。数字内容生产线,提供数字人视频制作、视频直播、智能交互、企业代言等多种服务能力,使能千行百业降本增效。另外,数字内容生产线&#…

Linux运维笔记:1010实验室电脑资源规范使用指南

文章目录 一. 检查资源使用情况,避免冲突1. 检查在线用户2. 检查 CPU 使用情况3. 检查 GPU 使用情况4. 协作建议 二. 备份重要文件和数据三. 定期清理硬盘空间四. 退出 ThinLinc 时注销,释放内存五. 校外使用时配置 VPN注意事项 总结 实验室的电脑配备了…

手机邮箱APP操作

收发电子邮件方式 邮箱可以在网络段登录,也可以在手机端登录。 大学网络服务 收发电子邮件有三种方式: 1、Web方式: 1)登录“网络服务”(https://its.pku.edu.cn),点页面顶端“邮箱”。 2&…

Dockerfile 使用多阶段构建(build 阶段 → release 阶段)后端配置

错误Dockerfile配置示例: FROM python:3.11 as buildENV http_proxyhttp://172.17.0.1:7890 ENV https_proxyhttp://172.17.0.1:7890WORKDIR /appENV PYTHONPATH/app# Install Poetry # RUN curl -sSL https://install.python-poetry.org | POETRY_HOME/opt/poetry…

webstrom中git插件勾选提交部分文件时却出现提交全部问题怎么解决

原因是我有个.husky的文件制定了执行提交的时候就是提交所有的文件 修改.husky/pre-commit文件就可以啦 #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh"# 获取通过 WebStorm 提交的暂存文件(仅勾选的部分) STAGED_FILES$(gi…

OSG编译wasm尝试

最近遇到一个情况,需要尝试一下OSG到webassembly 发现官网有教程 于是顺着看了看,默认教程是xubuntu的一个系统跑的,但是我本着试一试的想法,拉下来直接在windows上跑,奇奇怪怪的报错简直头皮发麻 然后怎么办呢&#x…

QT中子线程触发主线程弹窗并阻塞等待用户响应-传统信号槽实现

目录 QT中子线程触发主线程弹窗并阻塞等待用户响应传统信号槽实现实现思路具体步骤1. 定义信号与槽2. 异步任务中触发弹窗3. 主线程处理弹窗4. 连接信号与槽关键点总结 更简单实现 QT中子线程触发主线程弹窗并阻塞等待用户响应 传统信号槽实现 场景需求:在子线程执…

STM32学习之WWDG(原理+实操)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

【端午安康】龙舟争渡Plug-In

文章目录 正文附录A:关于Python的录屏方法总结(来自DeepSeek的回答)1. 使用 pyautogui 和 OpenCV 录制屏幕2. 使用 mss 库(高效屏幕捕获)3. 使用 PIL.ImageGrab 录制屏幕4. 使用 Windows 原生快捷键录制(非…

Apache SeaTunnel部署技术详解:模式选择、技巧与最佳实践

Apache SeaTunnel(原Waterdrop)作为高性能、分布式数据集成平台,支持海量数据的离线与实时同步。其灵活多样的部署模式可适配不同规模的生产环境需求。本文将系统解析SeaTunnel的部署架构、技术要点及最佳实践,帮助用户高效构建稳定可靠的数据管道。 一、部署模式全景概览 …

【机械视觉】Halcon—【六、交集并集差集和仿射变换】

【机械视觉】Halcon—【六、交集并集差集和仿射变换】 目录 【机械视觉】Halcon—【六、交集并集差集和仿射变换】 介绍 交集并集差集介绍: 1. 交集(Intersection) 2. 并集(Union) 3. 差集(Difference&#xff…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.6 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.6 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图&#xff0c;等值线图。 dataframe <-data.frame…

剑指offer15_数值的整数次方

数值的整数次方 实现函数 double Power(double base, int exponent) 题目要求 计算 base exponent \text{base}^{\text{exponent}} baseexponent&#xff1a; 不得使用库函数不需要考虑大数问题&#xff0c;绝对误差不超过 10 − 2 10^{-2} 10−2不会出现底数和指数同为 0…

【Typst】1.Typst概述

概述 Typst是一种用于排版文档的标记语言&#xff0c;可以用于排版各种精美的论文、文章、书籍、报告和作业等。它是LaTex的精神续作&#xff0c;但是运行环境和编译速度都要更简单、更快捷。 它设计了一种脚本结合简单的标记语法实现复杂的排版效果。并且支持模板创建、文件…

[Java恶补day14] 56. 合并区间

以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;intervals [[1,3…