自建Web網站部署——案例分析

在這里插入圖片描述

作者主頁:

知孤云出岫在這里插入圖片描述

目錄

    • ==作者主頁==:
    • 如何自建一個Web網站
      • 一、引言
      • 二、需求分析
      • 三、技術選型
      • 四、開發步驟
        • 1. 項目初始化
          • 初始化前端
          • 初始化后端
        • 2. 前端開發
          • 目錄結構
          • 示例代碼
            • App.js
            • Home.js
        • 3. 后端開發
          • 目錄結構
          • 示例代碼
            • app.js
            • productRoutes.js
            • Product.js
        • 4. 前后端連接
          • 安裝axios
          • 在`Products.js`中獲取產品數據
      • 五、部署
        • 1. Docker化
          • Dockerfile(前端)
          • Dockerfile(后端)
          • docker-compose.yml
        • 2. 使用Nginx反向代理
          • nginx.conf
      • 六、總結

如何自建一個Web網站

在這里插入圖片描述

一、引言

自建一個Web網站不僅可以展示個人或企業的內容,還可以提升技術能力和項目管理經驗。本文將通過一個具體案例,從需求分析、技術選型、開發步驟到部署和維護,詳細介紹如何自建一個Web網站。

二、需求分析

假設我們需要為一個小型企業創建一個展示其產品和服務的官方網站。需求包括:

  1. 首頁:展示公司簡介、主要產品和服務。
  2. 產品頁:詳細展示各個產品的圖片和描述。
  3. 服務頁:介紹公司提供的各類服務。
  4. 聯系我們頁:提供聯系表單和公司地址。
  5. 后臺管理系統:用于管理產品、服務和用戶反饋。

三、技術選型

根據需求選擇合適的技術棧:

  • 前端:HTML、CSS、JavaScript、React(用于構建用戶界面)
  • 后端:Node.js、Express(用于處理服務器端邏輯)
  • 數據庫:MongoDB(用于存儲數據)
  • 部署:Docker、Nginx(用于容器化和部署)

四、開發步驟

1. 項目初始化

首先,創建一個新的項目文件夾,并初始化前后端項目。

mkdir my_website
cd my_website
初始化前端
npx create-react-app frontend
初始化后端
mkdir backend
cd backend
npm init -y
npm install express mongoose body-parser cors
2. 前端開發
目錄結構
frontend
│   ├── public
│   ├── src
│   │   ├── components
│   │   ├── pages
│   │   ├── App.js
│   │   ├── index.js
│   └── package.json
示例代碼
App.js
import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Home from './pages/Home';
import Products from './pages/Products';
import Services from './pages/Services';
import Contact from './pages/Contact';function App() {return (<Router><Switch><Route path="/" exact component={Home} /><Route path="/products" component={Products} /><Route path="/services" component={Services} /><Route path="/contact" component={Contact} /></Switch></Router>);
}export default App;
Home.js
import React from 'react';function Home() {return (<div><h1>Welcome to Our Company</h1><p>We offer the best products and services.</p></div>);
}export default Home;
3. 后端開發
目錄結構
backend
│   ├── models
│   ├── routes
│   ├── app.js
│   └── package.json
示例代碼
app.js
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cors = require('cors');
const productRoutes = require('./routes/productRoutes');const app = express();
app.use(cors());
app.use(bodyParser.json());mongoose.connect('mongodb://localhost:27017/my_website', {useNewUrlParser: true,useUnifiedTopology: true,
});app.use('/api/products', productRoutes);app.listen(5000, () => {console.log('Server is running on port 5000');
});
productRoutes.js
const express = require('express');
const router = express.Router();
const Product = require('../models/Product');router.get('/', async (req, res) => {const products = await Product.find();res.json(products);
});router.post('/', async (req, res) => {const newProduct = new Product(req.body);await newProduct.save();res.json(newProduct);
});module.exports = router;
Product.js
const mongoose = require('mongoose');const productSchema = new mongoose.Schema({name: String,description: String,price: Number,imageUrl: String,
});const Product = mongoose.model('Product', productSchema);module.exports = Product;
4. 前后端連接

在前端,使用axios庫與后端進行通信。

安裝axios
npm install axios
Products.js中獲取產品數據
import React, { useState, useEffect } from 'react';
import axios from 'axios';function Products() {const [products, setProducts] = useState([]);useEffect(() => {axios.get('http://localhost:5000/api/products').then(response => {setProducts(response.data);}).catch(error => {console.error('There was an error fetching the products!', error);});}, []);return (<div><h1>Our Products</h1><ul>{products.map(product => (<li key={product._id}><h2>{product.name}</h2><p>{product.description}</p><p>${product.price}</p></li>))}</ul></div>);
}export default Products;

五、部署

1. Docker化

創建Dockerfile和docker-compose.yml文件,以便容器化應用。

Dockerfile(前端)
# Base image
FROM node:14# Set working directory
WORKDIR /app# Install dependencies
COPY package*.json ./
RUN npm install# Copy source code
COPY . .# Build the application
RUN npm run build# Expose the port
EXPOSE 3000# Start the application
CMD ["npm", "start"]
Dockerfile(后端)
# Base image
FROM node:14# Set working directory
WORKDIR /app# Install dependencies
COPY package*.json ./
RUN npm install# Copy source code
COPY . .# Expose the port
EXPOSE 5000# Start the application
CMD ["node", "app.js"]
docker-compose.yml
version: '3'
services:frontend:build: ./frontendports:- '3000:3000'depends_on:- backendbackend:build: ./backendports:- '5000:5000'environment:- MONGO_URL=mongodb://mongo:27017/my_websitemongo:image: mongoports:- '27017:27017'
2. 使用Nginx反向代理
nginx.conf
server {listen 80;location / {proxy_pass http://frontend:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location /api/ {proxy_pass http://backend:5000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

六、總結

自建一個Web網站需要綜合考慮前后端技術選型、開發、部署及維護。通過本案例,我們實現了一個簡單但功能齊全的網站,包括首頁、產品頁、服務頁、聯系我們頁及后臺管理系統。通過Docker和Nginx,我們確保了應用的可移植性和高可用性。在實際應用中,可能需要根據具體需求進行更多的定制和優化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45865.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

泛微e-cology WorkflowServiceXml SQL注入漏洞(POC)

漏洞描述&#xff1a; 泛微 e-cology 是泛微公司開發的協同管理應用平臺。泛微 e-cology v10.64.1的/services/接口默認對內網暴露&#xff0c;用于服務調用&#xff0c;未經身份認證的攻擊者可向 /services/WorkflowServiceXml 接口發送惡意的SOAP請求進行SQL注入&#xff0c;…

語音合成新篇章:Transformer模型的革新應用

語音合成新篇章&#xff1a;Transformer模型的革新應用 語音合成技術&#xff0c;又稱文本到語音&#xff08;Text-to-Speech, TTS&#xff09;技術&#xff0c;一直是人工智能領域的重要組成部分。隨著深度學習技術的飛速發展&#xff0c;Transformer模型憑借其卓越的處理序列…

飄雪的冬天,命運的交織

北風呼嘯,天空中飄著鵝毛般的大雪,這又是一個飄雪的冬天。京都醫院潔白的病床上躺著一個年輕女孩,她的臉上沒有一絲血色,眼睛深深地凹了進去,看上去已經病入膏肓。病房的窗口邊,一位身心俱疲的年輕男孩,望著病房外滿天飛舞的雪花,思緒不由回到了三年前的林州市…… 一…

使用JS和CSS制作的小案例(day二)

一、寫在開頭 本項目是從github上摘取&#xff0c;自己練習使用后分享&#xff0c;方便登錄github的小伙伴可以看本篇文章 50項目50天?編輯https://github.com/bradtraversy/50projects50dayshttps://github.com/bradtraversy/50projects50days有興趣的小伙伴可以自己去gith…

面向對象七大原則

學習目標 了解面向對象七大原則基本概念。 在之后實踐應用中&#xff0c;要給予七大原則去設計程序。 為什么有七大原則 七大原則總體要實現的目標是&#xff1a; 高內聚、低耦合。 使程序模塊的可重復性、移植性增強。 高內聚低耦合 從類角度來看&#xff0c;高內聚低…

如何在Linux上部署Ruby on Rails應用程序

在Linux上部署Ruby on Rails應用程序是一個相對復雜的過程&#xff0c;需要按照一系列步驟進行。下面是一個基本的部署過程&#xff0c;涵蓋了從安裝所需軟件到部署應用程序的所有步驟。 安裝必要的軟件 在部署Ruby on Rails應用程序之前&#xff0c;需要確保Linux系統上安裝了…

android 嵌套webview,軟鍵盤遮擋輸入框

實際項目中&#xff0c;android需要加載h5&#xff0c;經常遇到軟鍵盤遮蓋輸入框的情況&#xff0c;h5測試的時候&#xff0c;是沒問題的&#xff0c;但是在APP中是不能把頁面推上去。經測試完美解決了這個問題。 1. oncreate *************************** try {web();layout…

掌握Xcode Storyboard:iOS UI設計的可視化之旅

掌握Xcode Storyboard&#xff1a;iOS UI設計的可視化之旅 在iOS應用程序開發的世界中&#xff0c;用戶界面&#xff08;UI&#xff09;設計是吸引用戶的關鍵。Xcode的Storyboard功能為開發者提供了一個強大的可視化工具&#xff0c;通過拖放的方式快速構建和管理UI。本文將深…

AI網絡爬蟲023:用deepseek批量提取天工AI的智能體數據

文章目錄 一、介紹二、輸入內容三、輸出內容一、介紹 天工AI的智能體首頁: F12查看真實網址和響應數據: 翻頁規律: https://work.tiangong.cn/agents_api/square/sq_list_by_category?category_id=7&offset=0 https://work.tiangong.cn/agents_api/square/sq_list_b…

08 模型演化根本 深度學習推薦算法的五大范式

易經》“九三&#xff1a;君于終日乾乾&#xff1b;夕惕若&#xff0c;厲無咎”。九三是指陽爻在卦中處于第三位&#xff0c;已經到達中位&#xff0c;惕龍指這個階段逐漸理性&#xff0c;德才已經顯現&#xff0c;會引人注目&#xff1b;但要反思自己的不足&#xff0c;努力不…

基于 SSH 的任務調度系統的設計與實現

點擊下載源碼 基于SSH的任務調度系統的設計與實現 摘 要 隨著科學技術的飛速發展和各行各業的分工愈發明細化&#xff0c;對于改革傳統的人工任務調度方式的呼聲越來越大。得益于快速發展的計算機技術&#xff0c;我們看到了改革的方向。本系統是針對企業或者事業單位甚至一個…

Golang | Leetcode Golang題解之第234題回文鏈表

題目&#xff1a; 題解&#xff1a; func reverseList(head *ListNode) *ListNode {var prev, cur *ListNode nil, headfor cur ! nil {nextTmp : cur.Nextcur.Next prevprev curcur nextTmp}return prev }func endOfFirstHalf(head *ListNode) *ListNode {fast : headslo…

camtasia怎么剪掉不用的部分 屏幕錄制的視頻怎么裁剪上下不要的部分 camtasia studio怎么裁剪視頻時長 camtasia怎么剪輯視頻教程

有時我們錄制的屏幕內容&#xff0c;并不一定全部需要。那么&#xff0c;屏幕錄制的視頻怎么裁剪上下不要的部分&#xff1f;可以使用視頻剪輯軟件&#xff0c;或者微課制作工具來進行裁剪。屏幕錄制的視頻怎么旋轉&#xff1f;錄制視頻的旋轉也是一樣的&#xff0c;均在編輯步…

萬字長文之分庫分表里如何優化分頁查詢?【后端面試題 | 中間件 | 數據庫 | MySQL | 分庫分表 | 分頁查詢】

分庫分表的一般做法 一般會使用三種算法&#xff1a; 哈希分庫分表&#xff1a;根據分庫分表鍵算出一個哈希值&#xff0c;根據這個哈希值選擇一個數據庫。最常見的就是數字類型的字段作為分庫分表鍵&#xff0c;然后取余。比如在訂單表里&#xff0c;可以按照買家的ID除以8的…

【Flutter】 webview_flutter避坑

webview_flutter webview_flutter沒有SSL Error接口&#xff0c;也就是說等你的網頁出現SSL 錯誤的時候這個插件無法捕捉處理&#xff0c;除非你改它的源碼。 下面這段是webview_flutter官網的例子&#xff0c;它有onHttpError、onWebResourceError、但沒有任何捕捉 SSL 錯誤…

代謝組數據分析(十五):基于python語言構建PLS-DA算法構建分類模型

介紹 本教程描述了一個具有二元分類結果的研究的典型代謝組學數據分析工作流程。主要步驟包括: 從Excel表格導入代謝物和實驗數據。基于匯總QC的數據清洗。利用主成分分析可視化來檢查數據質量。兩類單變量統計。使用偏最小二乘判別分析(PLS-DA)進行多變量分析,包括: 模型…

go語言 fmt的幾個打印區別以及打印格式

文章目錄 一、打印Print1.1 fmt.Print 和 fmt.Println1.2fmt.Printf1.3 fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln1.4 fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln 二、打印格式基本格式動詞整數類型浮點數和復數類型字符串和字節切片布爾類型指針 一、打印Print Go 語言的 fm…

字符串類中的常用方法

1 string對象的創建 靜態創建 String s1  "abc";  String s2  "abc";  動態創建 String s3  new String("abc"); String s4  new String("abc"); 2string對象的不可變性 任何一個String對象在創建之后都不能對它的…

大數據環境下的房地產數據分析與預測研究的設計與實現

1緒論 1.1研究背景及意義 隨著經濟的快速發展和城市化進程的推進&#xff0c;房地產市場成為了國民經濟的重要組成部分。在中國&#xff0c;房地產行業對經濟增長、就業創造和資本投資起到了重要的支撐作用。作為中國西南地區的重要城市&#xff0c;昆明的房地產市場也備受關…

云備份服務端

文件使用工具和json序列化反序列化工具 //文件和json工具類的設計實現 #ifndef __UTIL__ #define __UTIL__ #include<iostream> #include<fstream> #include<string> #include <vector> #include<sys/stat.h> #include"bundle.h" #inc…