部署服务器项目及发布

当技术总监直接丢给我一个服务器账号密码时,我该怎么完成映射本机;配置网关;配置代理和发布项目呢?

我使用的是putty远程登录到服务器

输入ip后,点open

输入账号密码


登录的账号如果不是root;使用sudo su切换到root账号;再用命令cd /到根目录

服务器共享本机

首先将服务器共享到本机,更方便管理;全局安装Samba;

Samba的作用有以下两点:

  • Samba 是一个提供 SMB/CIFS 协议实现的开源软件包,允许 Linux 系统与 Windows 系统进行文件和打印共享。
  • 可用于设置网络共享目录,允许不同操作系统的用户访问和共享文件。

安装步骤(如果没在root用户下运行加上sudo)

1、安装Samba


        apt update(sudo apt update)
        apt install -y samba ( sudo apt install -y samba)

2、验证安装

检查 Samba 服务是否已成功安装和正在运行: 

systemctl status smbd

出现以上active字样就是正常运行中;接下来就是配置Samba

配置Samba

1、编辑Samba配置文件:

nano /etc/samba/smb.conf (sudo nano /etc/samba/smb.conf)

2、添加共享目录配置:


[printers]
   comment = All Printers
   browseable = yes
   path = /var/spool/samba
   printable = yes
   guest ok = yes
   read only = yes
   create mask = 0700

# Windows clients look for this share name as a source of downloadable
# printer drivers
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no

[共享文件1发布使用自己命名]
    comment = 说明内容自己写
    path = /usr/share/nginx // 共享路径
    valid users = 本机用户名自己写 root // 权限给到哪些用户
    write list = 本机用户名自己写 root
    read only = no // 读权限
    writable = yes // 写权限
    public = no // 是否允许匿名访问
    #guest ok = yes //是否允许未验证的用户访问 `#`表示设置未启用
    create mask = 0777 // 指定新文件创建时默认权限掩码
    force create mode = 0777 //强制新文件创建时具有的权限
    directory mask = 0777 // 指定新目录创建时的默认权限掩码
    force directory mode = 0777 // 强制新目录创建时具有的权限

[共享文件2代理使用自己命名]
    comment = 说明内容自己写
    path = /etc/nginx/conf.d
    valid users = 本机用户名自己写 root
    write list = 本机用户名自己写 root
    read only = no
    writable = yes
    public = no
    create mask = 0777
    force create mode = 0777
    directory mask = 0777
    force directory mode = 0777

例子:

配置完后ctrl + o保存;ctrl + x退出;然后启动Samba服务

3、重启Samba服务

systemctl restart smbd(sudo systemctl restart smbd)
systemctl restart nmbd(sudo systemctl restart nmbd)


4、添加用户到Samba

smbpasswd -a your_username (sudo smbpasswd -a your_username)

设置密码

5、启用Samba用户

smbpasswd -e your_username (sudo smbpasswd -e your_username)

自己设置的密码要记住咯。这时可以测试连接,在 Windows 中,确保使用正确的网络凭据尝试连接到 Samba 共享。格式通常是 \\<服务器IP>\share。确保输入的用户名和密码正确无误,并与服务器上的 Samba 用户一致。

例子:

win + R 输入\\<服务器IP>;enter回车输入账号密码;勾选记住我的凭据点确定

进来是这样

如果遇到了权限不够的情况可以使用这条命令:chown -R 用户名 ./(想给权限的路径,这里我是都给就可以使用./)

部署服务器

配置环境

  • 更新系统包列表:

    sudo apt update

  • 安装 Node.js

         Yarn 依赖于 Node.js,所以需要先安装 Node.js。推荐使用 NodeSource 提供的安装脚本

   curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -  //查看自己项目需要node是什么版本,我的是需要16版本的,用的setup_16.x

  apt install -y nodejs (sudo apt install -y nodejs)

如果你需要在同一服务器上管理多个 Node.js 版本,看作者另一篇博客。

Ubuntu下安装Node.js;npm_ubuntu 安装nodejs npm-CSDN博客

  • 安装 Yarn

       使用官方 Yarn 仓库进行安装。

  curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - 

  echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

   apt update (sudo apt update)

   apt install yarn (sudo apt install yarn)

如果遇到apt-key已弃用而安装不成功的使用以下方法进行安装

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarn-archive-keyring.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/yarn-archive-keyring.gpg] https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

apt update (sudo apt update)
apt install yarn (sudo apt install yarn)

        验证安装

          yarn --version

  • 安装 PM2

  1. 全局安装 PM2

    sudo npm install -g pm2

  2. 验证安装:安装完成后,可以使用以下命令验证 PM2 是否安装成功并查看版本:

    pm2 -v

  • 安装 Nginx

          根据个人项目选择使用      

        1、全局安装nginx

   sudo apt install nginx

         2、启动nginx服务

   sudo systemctl start nginx   

         3、确保nginx在开机时自动启动

   sudo systemctl enable nginx

         4、验证nginx状态

   sudo systemctl status nginx

配置pm2启动文件

如果是服务端请求接口需要配置,如果是客户端请求接口无需配置

例子production.json:

{
  "apps": [
    {
      "name": "自定义项目名",
      "port": 端口,
      "cwd": "发布项目的文件路径",
      "script": ".项目运行的js",
      "log_date_format": "YYYY-MM-DD HH:mm Z",
      "out_file": "./logs/app-blog-out.log",
      "error_file": "./logs/app-blog-err.log",
      "instances": "1",
      "min_uptime": "30s",
      "max_restarts": 30,
      "max_memory_restart": "600M",
      "watch": false,
      "ignore_watch": [
        "logs",
        "node_modules"
      ],
      "merge_logs": true,
      "exec_interpreter": "node",
      "exec_mode": "fork",
      "autorestart": true,
      "restart_delay": "10",
      "vizion": false,
      "env": {
        "NODE_ENV": "production"
      }
    }
  ]
}

每次修改完production.json文件后都要重新启动才生效

cd到当前有production.json的文件夹下

pm2 restart production.json

配置反向代理

根据项目是否需要再使用

关于更多知识点及原理我找了两篇,

一篇19年Nginx配置SSL实现https请求_listen 443 ssl;-CSDN博客;

一篇24年Nginx 配置 SSL(HTTPS)详解_nginx ssl-CSDN博客;

区别就是19年的用的系统是Ubuntu;24年的用的系统是linux

#配置端口代码 www是我的文件名
#微前端使用
upstream 项目名 {
  server 0.0.0.1:8000;
}
server {
 listen       443 ssl http2;
#域名
  server_name server.com;
#证书
  ssl_certificate   /usr/share/nginx/www/cert/fullchain.pem;
#秘钥
  ssl_certificate_key  /usr/share/nginx/www/cert/privkey.key;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SharedNixCraftSSL:10m;
  ssl_session_tickets off;
  proxy_connect_timeout 15s;
  proxy_read_timeout 15s;
  proxy_send_timeout 15s;
#add_header X-Frame-Options "SAMEORIGIN";
   add_header X-XSS-Protection "1; mode=block";
   add_header X-Content-Type-Options "nosniff";
   add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
   add_header X-Cache-Status $upstream_cache_status;
   ssl_stapling on;
   ssl_stapling_verify on;
#log
   ssl_trusted_certificate /usr/share/nginx/www/cert/fullchain.pem;
   error_log   /usr/share/nginx/www/logs/access.log error;
#头部协议
    proxy_pass_header Authorization;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $http_x_forwarded_for;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
#ssl动态路由(微前端使用更佳)
 location ~^/demo/(.*){
   proxy_poss http://项目名$request_uri;
 }
#ssl动态路由(常规项目使用)
 location ~^/demo/(.*){
   proxy_poss http://0.0.0.1:8000$request_uri;
 }
#ssl常规路由
 location = / {
    proxy_pass http://0.0.0.1:8000/;
  }
#client常规以个人中心为例
 location ~ ^/(user|customer)(.*) {
            root www/文件名/client;
        }  
}

保存配置,

启动nginx:systemctl restart nginx

只要更改过文件,都要重启

重启nginx:systemctl reload nginx

现在粗略看看等有空再细致更新啦。

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

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

相关文章

sqllab靶场练习第1~15关

1、第一关 代码解析 if(isset($_GET[id]))//判断获取的id字段是否为空 { $id$_GET[id]; //logging the connection parameters to a file for analysis. $fpfopen(result.txt,a);//打开这个文件&#xff0c;记录操作的日志 fwrite($fp,ID:.$id."\n"); fclose($fp);…

【C++高阶】深入理解C++异常处理机制:从try到catch的全面解析

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;Lambda表达式 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C异常 &#x1f4d2;1. C异常概念…

WPF学习(3)- WrapPanel控件(瀑布流布局)+DockPanel控件(停靠布局)

WrapPanel控件&#xff08;瀑布流布局&#xff09; WrapPanel控件表示将其子控件从左到右的顺序排列&#xff0c;如果第一行显示不了&#xff0c;则自动换至第二行&#xff0c;继续显示剩余的子控件。我们来看看它的结构定义&#xff1a; public class WrapPanel : Panel {pub…

【前端】(仅思路)如何在前端实现一个fc手柄,将手机作为游戏手柄设备。

文章目录 背景界面demo原型图&#xff08;没错&#xff0c;就是它&#xff0c;童年回忆&#xff09; 遇到的问题最终后端demo(甚至比前端逻辑更简单) 背景 突发奇想&#xff0c;想要在前端实现一个fc游戏手柄&#xff0c;然后控制电脑的nes模拟器玩玩魂斗罗。 思路很简单&…

【编程笔记】解决移动硬盘无法访问文件或目录损坏且无法读取

解决移动硬盘无法访问文件或目录损坏且无法读取 只解决&#xff1a;移动硬盘无法访问文件或目录损坏且无法读取 问题 由于频繁下载数据&#xff0c;多次安装虚拟机导致磁盘无法被系统识别。磁盘本身是好的&#xff0c;只是不能被识别&#xff0c;如果将磁盘格式化&#xff0c…

Chainlit快速实现AI对话应用1 分钟内实现聊天数据的持久化保存

概述 默认情况下&#xff0c;Chainlit 应用不会保留其生成的聊天和元素。即网页一刷新&#xff0c;所有的聊天记录&#xff0c;页面上的所有聊天记录都会消失。但是&#xff0c;存储和利用这些数据的能力可能是您的项目或组织的重要组成部分。 一旦启用&#xff0c;数据持久性…

Unlikely argument type for equals(): int seems to be unrelated to Long

代码审查不规范&#xff1a; Unlikely argument type for equals(): int seems to be unrelated to Long check package code_check;public class Obj {public Obj(){}private Long mail;public Long getMail(){return mail;}public void setMail(Long mail){this.mail mail;…

【零基础实战】基于物联网的人工淡水湖养殖系统设计

文章目录 一、前言1.1 项目介绍1.1.1 开发背景1.1.2 项目实现的功能1.1.3 项目硬件模块组成1.1.4 ESP8266工作模式配置 1.2 系统设计方案1.2.1 关键技术与创新点1.2.2 功能需求分析1.2.3 现有技术与市场分析1.2.4 硬件架构设计1.2.5 软件架构设计1.2.6 上位机开发思路 1.3 系统…

Java | Leetcode Java题解之第324题摆动排序II

题目&#xff1a; 题解&#xff1a; class Solution {Random random new Random();public void wiggleSort(int[] nums) {int n nums.length;int x (n 1) / 2;int mid x - 1;int target findKthLargest(nums, n - mid);for (int k 0, i 0, j n - 1; k < j; k) {if…

DAMA学习笔记(十)-数据仓库与商务智能

1.引言 数据仓库&#xff08;Data Warehouse&#xff0c;DW&#xff09;的概念始于20世纪80年代。该技术赋能组织将不同来源的数据整合到公共的数据模型中去&#xff0c;整合后的数据能为业务运营提供洞察&#xff0c;为企业决策支持和创造组织价值开辟新的可能性。与商务智能&…

使用Go语言绘制柱状图教程

使用Go语言绘制柱状图教程 本文将介绍如何使用Go语言及gg包绘制柱状图&#xff0c;并将图表保存为PNG格式的图片。gg包是一个功能强大的2D图形库&#xff0c;适合用于绘制各种图表。 安装gg包 首先&#xff0c;确保你已经安装了gg包。如果还没有安装&#xff0c;可以使用以下…

【安当产品应用案例100集】005-安当ASP实现Exchange双因素登录认证

Exchange双因素登录通过增加额外的安全验证层&#xff0c;可以有效提高企业邮箱系统的安全性&#xff0c;减少了数据泄露和账号被盗的风险&#xff0c;同时也符合了日益严格的安全合规要求。 其必要性主要体现在以下几个方面&#xff1a; 提高安全性&#xff1a;传统的用户名…

1.MySQL面试题之innodb如何解决幻读

1. 写在前面 在数据库系统中&#xff0c;幻读&#xff08;Phantom Read&#xff09;是指在一个事务中&#xff0c;两次读取同一范围的数据集时&#xff0c;由于其他事务的插入操作&#xff0c;导致第二次读取结果集发生变化的问题。InnoDB 作为 MySQL 的一个存储引擎&#xff…

【期货】收盘点评。昨天说的,p2409棕榈油在今天或者周一会走出行情

收盘点评 昨天说的&#xff0c;p2409棕榈油在今天或者周一会走出行情。事实就是如此。震荡了几天了&#xff0c;波幅不大的来回震荡&#xff0c;其实主力是不想震荡的&#xff0c;但是不震荡自己的货和行情走不出来。所以我昨天就说&#xff0c;应该就是这一两天会走出一波小行…

Linux中的无人值守安装脚本Kickstart

目录 一.kickstart自动安装脚本的作用 在企业中安装多台操作系统时面临的问题 如何解决以上问题&#xff1f; 二.实验环境 三.kickstart自动安装脚本的制作 通过模板生成kickstart文件 1.安装图形化生成kickstart自动安装脚本的工具 2.图形化工具配置流程 3.配置文件详…

力扣热题100_二叉树_94_二叉树的中序遍历

文章目录 题目链接解题思路解题代码 题目链接 94. 二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&#xff1a;root [] 输…

C#中重写tospring方法

在C#中&#xff0c;重写ToString方法允许你自定义对象的字符串表示形式。当你想要打印对象或者在调试时查看对象的状态时&#xff0c;重写ToString方法非常有用。 默认情况下&#xff0c;ToString方法返回对象的类型名称。通过重写这个方法&#xff0c;你可以返回一个更有意义…

sqli 1- 10

sql靶场 第一关 首先我们需要判断是否存在sql注入点&#xff0c;前端界面提示我使用ID作为参数,在url地址栏输入?id1 通过输入不同的id值查询数据库相对应的内容&#xff0c;之后判断为数字型还是字符型 根据查询内容判断为字符型且有注入点&#xff0c;再通过联合查询&…

#71结构体案例2(三国游戏,冒泡排序)

效果&#xff1a; 代码&#xff1a; #include <iostream> #include <string> using namespace std;//英雄结构体 struct Hero {string name;int age;string gender; };//冒泡排序 void bubbleSort(struct Hero hArray[],int len) {for(int i0;i<len-1;i){for(i…

首届中文NL2SQL挑战赛亚军比赛攻略_BugCreater

关联比赛: 首届中文NL2SQL挑战赛 1. 任务描述 本次比赛的任务&#xff1a;根据Question、表格信息&#xff08;包含列名、列类型、内容&#xff09;&#xff0c;预测对应的SQL语句&#xff08;下图黄色部分&#xff09;。比赛只涉及单表查询&#xff0c;需要预测的有4部分&a…