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

article/2025/6/15 6:09:39

前言

昨天更新了四篇博客,我们顺利的 安装了 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.hkcw.cn/article/MNuMRrFlPY.shtml

相关文章

nav2笔记-250603

合作背景: AMD与Open Navigation在过去几个月里进行了合作,旨在向ROS 2社区展示AMD强大的Ryzen AI、Embedded和Kria能力。 演示内容: 帖子提到,他们已经开始展示如何使用Ryzen AI为自主机器人产品提供动力,在各种现实世…

黑马Java面试笔记之 消息中间件篇(RabbitMQ)

一. 消息丢失问题 RabbitMQ如何保证消息不丢失? 使用场景有: 异步发送(验证码、短信、邮件... )MYSQL和Redis,ES之间的数据同步分布式事务削峰填谷...... 消息丢失原因会有三种情况,分别分析一下 1.1 生…

如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)

您是否曾经想更改网站外观的某些方面,但不知道怎么做?有一个解决方案——您可以将自定义 CSS(层叠样式表)添加到您的WordPress网站! 在本文中,我们将讨论您需要了解的有关CSS的所有知识以及如何使用它来修…

NLP学习路线图(二十):FastText

在自然语言处理(NLP)领域,词向量(Word Embedding)是基石般的存在。它将离散的符号——词语——转化为连续的、富含语义信息的向量表示,使得计算机能够“理解”语言。而在众多词向量模型中,FastT…

小巧实用,Windows文件夹着色软件推荐

软件介绍 本文介绍一款能实现Windows系统文件夹颜色分类的软件。 软件特点 这款软件免费且开源,体积仅1.35MB,小巧轻便,适合喜欢小工具的用户。 软件安装 安装过程十分便捷,打开软件后点击“install”即可完成安装。 基本操作…

解决Vditor加载Markdown网页很慢的问题(Vite+JS+Vditor)

1. 引言 在上一篇文章《使用Vditor将Markdown文档渲染成网页(ViteJSVditor)》中,详细介绍了通过Vditor将Markdown格式文档渲染成Web网页的过程,并且实现了图片格式居中以及图片源更换的功能。不过,笔者发现在加载这个渲染Markdown网页的时候…

leetcode hot100刷题日记——36.最长连续序列

解答&#xff1a; 实际上在哈希表中存储不重复的数字。 然后遍历哈希表&#xff0c;找间隔&#xff0c;更新最大间隔。 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int>hash;for(int num:nums){hash.insert(num);}in…

Unity Mac 笔记本操作入门

在 macOS 笔记本电脑上使用 Unity Editor 的场景视图 (Scene View) 旋转视角&#xff0c;主要依赖于触摸板手势和键盘修饰键的组合。由于没有物理中键&#xff0c;操作方式会与 Windows 鼠标略有不同。 以下是具体的旋转视角操作&#xff1a; 1. 基本旋转视角 (Orbit) 这是最…

【笔记】使用Media Creation Tool给新主机装win10魔改iso

前提&#xff1a; win10的iso是魔改的 已经下载好在旧电脑 在这里随便挑一个符合你要求的Win10系统下载_Win10专业版_windows10正式版下载 - 系统之家 下载好win10版本的媒体创建工具https://www.microsoft.com/zh-cn/software-download/windows10 制作装机U盘 插入U盘 管理…

深圳南柯电子|储能EMC整改:如何节省70%整改费用的实战方法

在新能源产业蓬勃发展的当下&#xff0c;储能系统作为电网调峰、可再生能源消纳的核心载体&#xff0c;其电磁兼容性&#xff08;EMC&#xff09;问题日益成为制约行业发展的技术瓶颈。EMC&#xff08;Electromagnetic Compatibility&#xff09;即电磁兼容性&#xff0c;指设备…

R1-Searcher++新突破!强化学习如何赋能大模型动态知识获取?

R1-Searcher新突破&#xff01;强化学习如何赋能大模型动态知识获取&#xff1f; 大语言模型&#xff08;LLM&#xff09;虽强大却易因静态知识产生幻觉&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术成破局关键。本文将解读R1-Searcher框架&#xff0c;看其如何通…

用 Vue 做一个轻量离线的“待办清单 + 情绪打卡”小工具

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

6-2 MySQL 数据结构选择的合理性

6-2 MySQL 数据结构选择的合理性 文章目录 6-2 MySQL 数据结构选择的合理性1. 全表查询2. Hash 查询3. 二叉搜索树4. AVL 树5. B-Tree6.B Tree7. R树8. 小结附录&#xff1a;算法的时间复杂度9. 最后&#xff1a; 这篇文章是我蹲在《尚硅谷》-康师傅博主家的 WiFi 上(不是)&am…

红黑树与红黑树的插入——用C++实现

一、红黑树简介 红黑树是二叉搜索树的一种&#xff0c;区别于二叉平衡树&#xff0c;红黑树的平衡并不以平衡因子为依据进行平衡的调整而是以五条规则对红黑树进行定义&#xff0c;从而达成树的最长路径最多是树的最短路径的两倍长。以下是红黑树的五条规则&#xff1a; 节点非…

线程相关面试题

提示&#xff1a;线程相关面试题&#xff0c;持续更新中 文章目录 一、Java线程池1、Java线程池有哪些核心参数&#xff0c;分别有什么的作用&#xff1f;2、线程池有哪些拒绝策略&#xff1f;3、说一说线程池的执行流程?4、线程池核心线程数怎么设置呢&#xff1f;4、Java线程…

Axure设计案例:滑动拼图解锁

设计以直观易懂的操作方式为核心&#xff0c;只需通过简单的滑动动作&#xff0c;将拼图块精准移动至指定位置&#xff0c;即可完成解锁。这种操作模式既符合用户的日常操作习惯&#xff0c;在视觉呈现上&#xff0c;我们精心设计拼图图案&#xff0c;融入生动有趣的元素&#…

报表/报告组件(二)-实例与实现解释

上篇《报表/报告组件(一)-指标/属性组件设计》介绍了组件核心指标/属性设计&#xff0c;本文以实例介绍各个特性的实现和效果&#xff0c;实例是多个报告融合&#xff0c;显示所有的特性。 设计 指标/属性组件是报告/报表关键部分&#xff0c;上篇已介绍过&#xff0c;本节回顾…

django入门-orm数据库操作

一&#xff1a;下载数据库依赖项mysqlclient pip install mysqlclient 二&#xff1a;django配置文件配置数据库链接 路径&#xff1a;mysite2\mysite2\settings.py DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: data, # 数据库名称USER: root, …

开疆智能Profinet转Profibus网关连接CMDF5-8ADe分布式IO配置案例

本案例是客户通过开疆智能研发的Profinet转Profibus网关将PLC的Profinet协议数据转换成IO使用的Profibus协议&#xff0c;操作步骤如下。 配置过程&#xff1a; Profinet一侧设置 1. 打开西门子组态软件进行组态&#xff0c;导入网关在Profinet一侧的GSD文件。 2. 新建项目并…

【RabbitMQ】- Channel和Delivery Tag机制

在 RabbitMQ 的消费者代码中&#xff0c;Channel 和 tag 参数的存在是为了实现消息确认机制&#xff08;Acknowledgment&#xff09;和精细化的消息控制。 Channel 参数 作用 Channel 是 AMQP 协议的核心操作接口&#xff0c;通过它可以直接与 RabbitMQ 交互&#xff1a; 手…