從零到一使用Linux+Nginx+MySQL+PHP搭建的Web網站服務器架構環境——LNMP(下)

從零到一使用Linux+Nginx+MySQL+PHP搭建的Web網站服務器架構環境——LNMP(上)https://coffeemilk.blog.csdn.net/article/details/151350565

一、Nginx與PHP-FPM整合原理

?1.1、PHP-FPM配置文件

Nginx與PHP-FPM整合原理
序號說明
1

PHP-FPM是一個第三方的FastCGI進程管理器,最先它是作為PHP的一個補丁來開發的,現在PHP-FPM已經集成到了PHP源碼中,在配置安裝PHP的時候,通過指定“--enable-fpm”選項即可啟用PHP-FPM功能。

#PHP的源碼編譯配置
./configure  --prefix=/usr/local/php  --enable-fpm  --with-fpm-user=www  --with-fpm-group=www  --with-pdo-mysql=mysqlnd  --with-mysqli=mysqlnd  --with-zlib  --with-curl  --enable-gd   --with-jpeg=/usr  --with-freetype=/usr  --with-openssl  --enable-mbstring  --enable-xml  --enable-session  --enable-ftp  --enable-pdo -enable-tokenizer  --with-zip
2

PHP-FPM管理的進程包含【master進程】和【worker進程】兩種。

《1》master進程只有一個,主要負責監聽端口,接收來自Web Server的請求;

《2》而worker進程則一般有多個(具體數量根據實際需要配置),每個進程內部都嵌了一個PHP解釋器,是PHP代碼真正執行的地方。

3

那么Nginx又是如何發送請求給PHP-FPM的呢?

????????這就要從Nginx層面講起了,我們知道,Nginx不僅僅是一個Web服務器,也是一個功能強大的代理服務器,除了進行http請求的代理,也可以進行許多其他協議請求的代理,包括與PHP-FPM相關的FastCGI協議。

????????為了能夠使Nginx理解FastCGI協議,Nginx提供了一個FastCGI模塊來將http請求映射為對應的FastCGI請求,這樣,Nginx就可以將請求發送給PHP-FPM了,也就實現了Nginx與PHP-FPM的集成。

PHP-FPM配置文件操作
序號說明
1

我們在使用PHP源碼編譯安裝完成PHP后,PHP的默認安裝路徑是【/usr/local/php】。

#1-PHP的默認安裝路徑是【/usr/local/php】
cd /usr/local/php#2-PHP的默認配置路徑【/usr/local/php/etc】
cd /usr/local/php/etc#3-需要將PHP默認配置路徑下的【php-fpm.conf.default】文件名稱
#修改為【php-fpm.conf】(這個文件只有最后一行的 
#【include=/usr/local/php/etc/php-fpm.d/*.conf】是有用的)
mv php-fpm.conf.default php-fpm.conf

2

#1-進入PHP默認配置路徑下的【php-fpm.d】目錄下
#【www.conf.default】文件名稱修改為【www.conf】
#并且編輯該配置文件【將該文件里面配置如:
#user與group后面的內容都修改為(www);(listen = 127.0.0.1:9000)】
mv www.conf.default www.conf
vi www.conf#【/usr/local/php/etc/php-fpm.d/www.conf】文件里面具體需編輯的內容如下:
[www]
user = www
group = www
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

3PHP的詳細配置文件【/usr/local/php/etc/php-fpm.d/www.conf】參數項說明

user

group

設置運行php-fpm進程的用戶;

設置運行php-fpm進程用戶組;

listen 配置php-fpm進程監聽的IP地址以及端口,默認是127.0.0.1:9000
pm

用來指定php-fpm進程池開啟進程的方式,有兩個值可以選擇:

《1》static(靜態);

《2》dynamic(動態);

《3》ondemand(按需);

pm.max_children

在static方式下表示固定開啟的php-fpm子進程數量;

在dynamic方式下表示開啟php-fpm的最大進程數;

pm.start_servers

【只在pm=dynamic方式】下初始開啟php-fpm的子進程數量;

默認值=(min_spare_servers+max_spare_server)/2

pm.min_spare_servers 【只在pm=dynamic方式】空閑狀態下開啟的最小php-fpm子進程數量
pm.max_spare_servers

【只在pm=dynamic方式】空閑狀態下開啟的最大php-fpm進程數量;

注意:pm.max_spare_servers的值只能小于等于pm.max_children的值

pm.max_spawn_rate【只在pm=dynamic方式】下一次性生成的子進程數量;默認值是32且不啟用
pm.process_idle_timeout【只在pm=ondemand方式】下空閑進程在多少秒后被終止;默認值是10秒且不啟用
pm.max_requests每個子進程在重新生成之前應執行的請求數量。
這有助于解決第三方庫中的內存泄漏問題。要進行無限的請求處理,請指定“0”。等同于 PHP_FCGI_MAX_REQUESTS。
默認值:0;默認是不啟用

?1.2、配置Nginx來支持PHP并測試

#配置Nginx來支持PHP的完整操作流程#1-查看已有nginx的編譯所有配置信息和版本(若是yum安裝的Nginx則直接使用【nginx -V】即可)
#也可使用【systemctl status nginx.service】查看到Nginx的配置文件啟動路徑等信息
#【yum安裝的Nginx的配置文件默認是(/etc/nginx/nginx.conf)】
#【使用源碼安裝的Nginx的配置文件默認是(/usr/local/nginx/conf/nginx.conf)】
systemctl status nginx.servicewhereis nginx
/usr/local/nginx/sbin/nginx -V#2-編輯Nginx的配置文件實現反向代理.php內容到php-fpm中(及其最終配置為的內容)
vi /etc/nginx/nginx.confserver {listen       80;listen       [::]:80;server_name  _;root         /usr/share/nginx/html;location / {index index.html index.htm index.php;root html;}location ~ \.php$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}#3-查看系統當前運行的Nginx進程信息并獲取到Nginx的父進程PID編號(如:1224)
#獲取到Nginx的父進程PID后【在不影響Nginx處理業務的情況下重啟Nginx】
ps -ef | grep nginx
kill -HUP 1224#4-檢查PHP-FPM服務是否已經啟動(若未啟動則需要啟動,且設置開機自啟)
systemctl status php-fpm.service 
systemctl start php-fpm.service 
systemctl enable php-fpm.service#5-若使用systemctl命令啟動服務失敗,可以查看服務狀態配合日志來判斷定位問題(如:這里排查后提示日志文件是只讀模式,導致無法寫入才失敗,因此我們可以進入日志所在目錄查看日志的權限;如權限沒有問題就是php-fpm服務中的ProtectSystem屬性保護系統導致,需要將php-fpm服務中的ProtectSystem屬性值修改為false保存退出后,重載服務并重啟php-fpm服務即可)
systemctl status php-fpm.service 
tail -20 /var/log/messagescd /usr/local/php/var/log/
ll
vi /usr/lib/systemd/system/php-fpm.service
ProtectSystem=falsesystemctl daemon-reload
systemctl start php-fpm.service
systemctl status php-fpm.service#6-查看php-fpm的所有進程信息與網絡端口信息
ps -ef | grep php-fpm
netstat -antlp | grep php-fpm#7-進入到Nginx配置網站內容的路徑且編寫一個php文件用于測試Nginx對php的反向代理和支持
cd /usr/local/nginx/html
vi phpinfo.php#7.1-給phpinfo.php文件里面的內容如下:
<?php phpinfo(); ?>#8-在瀏覽器輸入Nginx所在服務器的IP地址/phpinfo.php即【ip/phpinfo.php】(如:192.168.1.9/phpinfo.php)看該文件是否可以解析出正常的內容
#8.1-查看Linux服務器的ip命令
ifconfig#9-通過【mysqli方式】測試PHP連接MySQL是否正常
#9.1-進入Nginx的網站配置路徑
cd /usr/share/nginx/html/
#9.2-創建并編輯mysqli.php文件
vi mysqli.php#mysqli.php文件中連接mysql數據的代碼(保存并退出)
<?php
$conn = mysqli_connect('127.0.0.1', 'root', 'abc123456', 'mysql','3336');
if(!$conn){
die("數據庫連接錯誤" . mysqli_connect_error());
}else{
echo"數據庫連接成功";
}
?>#9.3-在瀏覽器輸入Nginx所在服務器的IP地址/mysqli.php即【ip/mysqli.php】(如:192.168.1.9/mysqli.php)查看是否顯示“數據庫連接成功”#10-通過【pdo-mysql方式】測試PHP連接MySQL是否正常
#10.1-進入Nginx的網站配置路徑
cd /usr/share/nginx/html/
#10.2-創建并編輯mysqli.php文件
vi pdo-mysql.php#pdo-mysql.php文件中連接mysql數據的代碼(保存并退出)
<?php
try{
$pdo=new pdo('mysql:host=127.0.0.1;port=3336;dbname=mysql','root','abc123456');
}catch(PDDException $e){
echo "pdo方式連接數據庫失敗"+$e;
}
echo "pdo方式連接數據庫成功";
?>#10.3-在瀏覽器輸入Nginx所在服務器的IP地址/pdo-mysql.php即【ip/pdo-mysql.php】(如:192.168.1.9/pdo-mysql.php)查看是否顯示“pdo方式連接數據庫成功”

現在在瀏覽器上輸入Nginx所在服務器的IP地址/phpinfo.php即【服務器IP/phpinfo.php】(如:192.168.1.9/phpinfo.php)

????????注意:如果我們在瀏覽器訪問(192.168.1.9/phpinfo.php)并沒有正常顯示php內容,且提示“File not fount”時的排查解決思路:進入Nginx服務器并查看報錯日志;分析報錯日志。

#進入Nginx服務器并查看報錯日志;分析報錯日志詳細排查解決流程:#1-查看當前服務器的Nginx的默認目錄配置、報錯日志文件命令
nginx -V#2-根據查找到的nginx報錯日志文件打開查看
tail -f /var/log/nginx/error.log#3-通過查看Nginx的報錯日志文件可以清晰的看到報錯日志是“FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream”;我們若不清楚這個報錯信息可以將這個報錯內容粘貼到百度查看即可查看到解決方法【該錯誤的含義是php-fpm的FastCGI無法響應Nginx反向代理過來的內容,在結合瀏覽器界面上顯示的沒有發現我們訪問的phpinfo.php文件】(總結一下這個問題的原因就是:我們在Nginx上創建的phpinfo.php所在的路徑不對,導致Nginx沒有找到這個文件;只需要將這個文件在Nginx正確讀取的網站路徑下配置就可以解決了)#4-查找Nginx對應的正確網站路徑(是【/usr/share/nginx/html】,接著在該路徑下重新創建phpinfo.php文件)
nginx -V
cd /usr/share/nginx/html
vi phpinfo.php#phpinfo.php文件的內容是
<?php phpinfo(); ?>#5-再次訪問【ip/phpinfo.php】(如:192.168.1.9/phpinfo.php)即可成功顯示php的版本配置信息內容

到這里恭喜你配置Nginx支持php-fpm解析成功了!!!

《1》接下來是通過【mysqli方式 】測試php連接mysql數據庫是否正常:

????????在瀏覽器輸入Nginx所在服務器的IP地址/mysqli.php即【ip/mysqli.php】(如192.168.1.9/mysqli.php)若顯示“數據庫連接成功”則表示php連接mysql沒有問題(如下圖所示)否則就是有問題的(具體的問題需要查看Nginx的錯誤日志【tail -f /var/log/nginx/error.log】)

《2》接下來是通過【pdo-mysql方式 】測試php連接mysql數據庫是否正常:

?????????在瀏覽器輸入Nginx所在服務器的IP地址/pdo-mysql.php即【ip/pdo-mysql.php】(如192.168.1.9/pdo-mysql.php)若顯示“pdo方式連接數據庫成功”則表示php連接mysql沒有問題(如下圖所示)否則就是有問題的(具體的問題需要查看Nginx的錯誤日志【tail -f /var/log/nginx/error.log】)

二、在LNMP環境下部署WordPress網站項目

????????本文以wordpress為例,介紹下在LNMP環境下,如何部署和使用這套博客系統,WordPress 是一個基于 PHP 和 MySQL 的開源內容管理系統(CMS),用戶可以免費使用、修改和分發,安裝完成后,通過后臺管理界面進行網站的配置和內容管理。

#在LNMP環境下載安裝部署應用項目WordPress詳細操作流程#1-進入/data目錄然后從WordPress網站下載安裝包
cd /data
wget https://cn.wordpress.org/wordpress-6.8.2-zh_CN.tar.gz#2-將下載好的WordPress安裝包解壓到Nginx網站目錄下(/usr/share/nginx/html/)
tar -zxvf wordpress-6.8.2-zh_CN.tar.gz -C /usr/share/nginx/html#3-進入Nginx的默認網站目錄下(可以查看到有一個名為wordpress的文件夾里面就是全部的php網站內容)
cd /usr/share/nginx/html/
ls
cd ./wordpress/
ll#4-在瀏覽器輸入NginxIP/wordpress即可訪問(若不能訪問到安裝界面則在后面添加上index.php就可以了)
192.168.1.9/wordpress#5-在mysql數據庫中創建wordpress的數據庫
/usr/local/mysql/mysql-8.4.6/bin/mysql -uroot -p
create database wordpress;#6-在Nginx的默認網站路徑下的wordpress網站中創建【wp-config.php】文件并填寫內容
vi /usr/share/nginx/html/wordpress/wp-config.php#6.1-在Nginx的默認網站路徑下的wordpress網站中創建【wp-config.php】文件對應的內容
<?php
/*** The base configuration for WordPress** The wp-config.php creation script uses this file during the installation.* You don't have to use the website, you can copy this file to "wp-config.php"* and fill in the values.** This file contains the following configurations:** * Database settings* * Secret keys* * Database table prefix* * ABSPATH** @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/** @package WordPress*/// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );/** Database username */
define( 'DB_USER', 'root' );/** Database password */
define( 'DB_PASSWORD', 'abc123456' );/** Database hostname */
define( 'DB_HOST', '127.0.0.1:3336' );/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );/**#@+* Authentication unique keys and salts.** Change these to different unique phrases! You can generate these using* the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.** You can change these at any point in time to invalidate all existing cookies.* This will force all users to have to log in again.** @since 2.6.0*/
define( 'AUTH_KEY',         'SXfAJ2,9cW^4[%U/2*}p!2`wa_Nfv:.}:s$a-/(M){cPO{YX1O7];:xFcqjirnn#' );
define( 'SECURE_AUTH_KEY',  '[orgrI*qeAlv10NT6yvLN|KYZ4i8km;X9I%M5=X_x;D*YxE.W`G8zHf-CIW-i$Dj' );
define( 'LOGGED_IN_KEY',    '[0&^_kfTzSk/&8{li3V+M#qt@,T@E;Z*wO>kHEwKV,eM6tFbT$0dZSV+;m|AjOur' );
define( 'NONCE_KEY',        'EIEx?o`;AM@4{aD/V:(to%#)0Xv1=>Z?X!a}mK7$!FrbRoj|1>nnj+**yuejAT~<' );
define( 'AUTH_SALT',        'qd#3G(O:1s?Y<3LKZii ?!&sN@j7jDpa%sej*Po%C}>EUAk!p?@BltS+tbyT*;]L' );
define( 'SECURE_AUTH_SALT', '$LvzuK:/t7_.`SGDCp946r?)*x%srjJreh]z+p4bYCq*rQ <DL98Pe,a%,oS}?S!' );
define( 'LOGGED_IN_SALT',   'rppE.fpZ7MZlaJb.fJU@-^p;4-ObSZg`ay{P>4^d%m1IV`vC$KiMc++1[[s8t*9q' );
define( 'NONCE_SALT',       ']=s+s^ 8rI=q++-&$e,]_#>s,W9E?-8ou-kE==|m_wIA->9u{qoF);Dmf+VZ1(/l' );/**#@-*//*** WordPress database table prefix.** You can have multiple installations in one database if you give each* a unique prefix. Only numbers, letters, and underscores please!** At the installation time, database tables are created with the specified prefix.* Changing this value after WordPress is installed will make your site think* it has not been installed.** @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/#table-prefix*/
$table_prefix = 'wp_';/*** For developers: WordPress debugging mode.** Change this to true to enable the display of notices during development.* It is strongly recommended that plugin and theme developers use WP_DEBUG* in their development environments.** For information on other constants that can be used for debugging,* visit the documentation.** @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/*/
define( 'WP_DEBUG', false );/* Add any custom values between this line and the "stop editing" line. *//* That's all, stop editing! Happy publishing. *//** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {define( 'ABSPATH', __DIR__ . '/' );
}/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

注意:在這一步點擊【安裝WordPress】前一定要先復制一份密碼框的內容做備份,否則第一次登錄的密碼那里你都不知道密碼就無法登錄了!!!

三、LNMP環境下給Web開啟https

?3.1、HTTP與HTTPS

HTTP與HTTPS
序號說明
1HTTP是互聯網上應用最為廣泛的一種網絡協議,是一個客戶端和服務器端請求和應答的標準(TCP),HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全。
2HTTPS是以安全為目標的HTTP通道,簡單講是HTTP的安全版本,HTTPS協議是利用SSL+HTTP協議建立安全信道,加密數據包,提供身份認證的網絡協議,要比http協議安全。
HTTPS和HTTP的區別
1

http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

2

http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。

3

使用https協議需要申請SSL證書,證書有收費和免費的。

現在幾乎所有的網站都開啟了https協議,所以使用https已經是個趨勢。

?3.2、SSL證書的獲取

關于證書完整申請的流程如下:

????????購買域名--->購買云主機(可獲取到公網IP)--->工信部備案域名(備案需要域名和可解析的公網IP地址,最快兩周內即可完成備案)--->備案成功后,就可以做域名解析了--->購買SSL證書--->在云主機部署網站程序,加載免費證書。

????????注意:商業CA機構頒發證書時,需要綁定公網域名(即:在申請SSL證書之前,你的域名已經申請好了,并且也做了域名備案和解析,否則無法申請SSL證書)。 ???????

? ? ? ? 現在很多網站都提供免費的SSL證書(如:阿里云?的數字證書服務,可以一次申請3個月免費的SSL證書,過期后,可繼續再次申請3個月的免費證書),申請方式如下:

?3.3、綁定SSL證書到Nginx

????????將會申請好的證書綁定到我們服務器的Nginx配置上即可,在Nginx上配置ssl證書,需要在nginx.conf中添加一個server段,內容如下:

#1-在Nginx的配置文件路徑創建一個證書的文件夾ssl,然后將SSL證書上傳到Nginx的配置文件所在路徑下的ssl中(如:/etc/nginx/)
cd /etc/nginx/
mkdir ssl#2-編輯Nginx的配置文件
vi /etc/nginx/nginx.conf#2.1-編輯Nginx啟用SSL證書的配置內容server{listen       443 ssl;listen       [::]:443 ssl;root         /usr/share/nginx/html;server_name ck.site www.ck.site;ssl_certificate   ssl/ck.site.pem;ssl_certificate_key ssl/ck.site.key;ssl_prefer_server_ciphers on;ssl_protocols    TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers     "HIGH:!aNULL:!MD5";add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-Xss-Protection 1;location / {root html;index  index.html index.htm index.php;}location ~ \.php$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}#3-驗證修改后的Nginx的配置文件nginx.conf是否正確
nginx -t#4-查看系統當前的Nginx進程獲取到Nginx的父進程PID編號(如:5035)
ps -ef | grep nginx#5-在不影響Nginx正常業務處理的情況下重啟Nginx
kill -HUP 5035#6-在瀏覽器輸入域名訪問即可查看到效果

?3.4、配置Nginx只能通過域名訪問不能使用IP訪問

#配置Nginx只能通過域名(如:ck.site)訪問不能使用IP訪問的配置流程#1-在Nginx的配置文件所在路徑中(如:/etc/nginx/)
cd /etc/nginx/#2-編輯Nginx的配置文件
vi /etc/nginx/nginx.conf#3-實現只能通過域名(如:ck.site)訪問不能使用IP訪問的nginx配置內容server {listen 80 default_server;listen [::]:80 default_server;server_name _;# 當用IP訪問時,返回500錯誤碼#return 500;#把IP和其他域名訪問的流量永久重定向到我們的域名return 301 https://ck.site$request_uri;}server {listen 443 ssl default_server;listen [::]:443 ssl default_server;ssl_certificate ssl/ck.site.pem;ssl_certificate_key ssl/ck.site.key;server_name _;#return 500;#把IP和其他域名訪問的流量永久重定向到我們的域名return 301 https://ck.site$request_uri;}server {listen 80;listen [::]:80;listen 443;listen [::]:443;server_name ck.site www.ck.site;#將IP和其他域名訪問的流量永久重定向到我們的域名中return 301 https://$server_name$request_uri;location / {root /usr/share/nginx/html;#根據需要設置訪問白名單(這里只允許192.168.1網段與192.168.3網段的設備訪問)allow 192.168.1.0/24;allow 192.168.3.0/24;deny  all;}}#4-驗證修改后的Nginx的配置文件nginx.conf是否正確
nginx -t#5-查看系統當前的Nginx進程獲取到Nginx的父進程PID編號(如:5035)
ps -ef | grep nginx#6-在不影響Nginx正常業務處理的情況下重啟Nginx
kill -HUP 5035#7-在瀏覽器輸入域名訪問即可查看到效果

????????如果要在本地的Windows系統使用自己的域名測試,則需要進入【C:\Windows\System32\drivers\etc】路徑,將該路徑下的【hosts】文件復制一份到桌面上,然后使用文本編輯器打開輸入自己的域名及其IP地址后保存;然后在將桌面上修改好的這個hosts文件復制粘貼到【C:\Windows\System32\drivers\etc】路徑下替換原有的hosts文件即可。

注意,在正式修改Windows系統的hosts文件前先復制一份作為備份。

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

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

相關文章

論文閱讀-Correlate and Excite

文章目錄1 背景2 創新點3 方法3.1 總體結構3.2 代價體計算3.3 引導式代價體激勵&#xff08;GCE&#xff09;3.4 TopK視差回歸4 效果參考資料1 背景 在IGEV中構建幾何編碼體CGC_GCG?時用到了本文將要描述的CoEx&#xff0c;IGEV中沒有說明為什么要這樣做&#xff0c;本文就是…

探索大語言模型(LLM):Open-WebUI的安裝

前言 Open-WebUI 是一款專為大模型設計的開源可視化交互工具&#xff0c;它通過類 ChatGPT 的直觀界面&#xff0c;讓用戶無需代碼即可管理、調試和調用本地或云端的大語言模型&#xff08;LLMs&#xff09;&#xff0c;成為私有化部署的便捷工具&#xff0c;本文將介紹如何部…

企業遠程訪問方案選擇:何時選內網穿透,何時需要反向代理?

企業遠程訪問需求日益增長&#xff0c;無論是遠程辦公、分支互聯還是服務發布&#xff0c;選擇合適的網絡方案都至關重要。內網穿透和反向代理是兩種常見的技術手段&#xff0c;但它們的設計目標和適用場景截然不同。本文將客觀分析兩者的特點&#xff0c;幫助企業做出更合理的…

ARM指令集(Instruction Set)細節

ARM指令集(Instruction Set)細節 本文旨在深入探討 ARM 指令集(Instruction Set)的細節。這是一個非常廣泛的主題&#xff0c;我會將其分解為關鍵概念、不同版本的區別以及核心特性&#xff0c;并提供一些示例。 ARM 指令集的核心在于 RISC&#xff08;精簡指令集計算機&#x…

Vue基礎知識-Vue集成 Element UI全量引入與按需引入

一、方式一&#xff1a;全量引入 Element UI全量引入即一次性加載 Element UI 所有組件和樣式&#xff0c;優點是配置簡單&#xff0c;適合快速開發&#xff1b;缺點是打包體積較大&#xff0c;生產環境可能存在冗余。1. 安裝 Element UI全量引入只需安裝 Element UI 核心依賴&…

leetcode26(字母異位詞分組)

給你一個字符串數組&#xff0c;請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。示例 1:輸入: strs ["eat", "tea", "tan", "ate", "nat", "bat"]輸出: [["bat"],["nat","…

光平面標定 (Laser Plane Calibration) 的原理和流程

光平面標定 (Laser Plane Calibration) 是線激光3D相機系統中最為關鍵且精巧的一步,它直接決定了最終的測量精度。 核心目標 光平面標定的目標是:精確地求出激光器發射出的那個扇形激光平面,在相機坐標系下的數學方程。 這個方程通常表示為一般式: Ax + By + Cz + D = 0…

項目1——單片機程序審查,控制系統項目評估總結報告

執行摘要 本報告對基于STM32F103RET6的老虎機控制系統進行了全面的技術評估。通過深入分析代碼結構、系統架構、安全機制和潛在風險&#xff0c;為項目的進一步開發和部署提供專業建議。 核心發現 ? 系統架構: 設計合理&#xff0c;模塊化程度高?? 安全性: 存在輸入驗證和并…

【Qt應用程序】

Qt應用程序摘要概述快速開始Qt在線下載與安裝Visual Studio開發Qt項目VS配置Qt擴展VS創建Qt項目配置qDebug調試信息配置源程序的字符集項目結構對象樹與內存回收基礎數據類型信號槽定時器窗口QWidgetQMainWindowQDialog窗口布局窗口中添加右鍵菜單控件按鈕類容器類自定義控件事…

機器學習實戰(一): 什么是機器學習

機器學習&#xff1a;讓機器學會思考的魔法前言 在當今數字化的浪潮中&#xff0c;人工智能無疑是最引人注目的技術之一&#xff0c;而機器學習正是其核心驅動力。它不再是科幻電影中的遙遠設想&#xff0c;而是已經滲透到我們日常生活的方方面面&#xff0c;從智能推薦到自動駕…

java流水號生成方式

1、基于時間戳生成流水號利用當前時間戳生成流水號&#xff0c;可以確保唯一性。通過格式化時間戳&#xff0c;可以生成固定位數的流水號。SimpleDateFormat sdf new SimpleDateFormat("yyyyMMddHHmmssSSS"); String serialNumber sdf.format(new Date());特點&…

前端工具大全:前端開發工具、前端調試工具、前端性能優化工具與構建工具的對比與最佳實踐

在現代前端開發中&#xff0c;工具鏈已經成為開發效率與代碼質量的關鍵。無論是 編輯器與 IDE、構建與打包工具、調試工具 還是 性能優化工具&#xff0c;每一個環節都有成熟的解決方案。 然而&#xff0c;工具太多也容易讓團隊選擇困難&#xff1a;該選 VS Code 還是 WebStorm…

ABAP 使用ECHARTS實現圖表展示

最近發現ECHARTS可以整合到SAP中的開源項目&#xff0c;可以絲滑的在SAP中展示各種圖表&#xff0c;還是相當驚艷的。 ECHARTS官方網站&#xff1a;https://echarts.apache.org/examples/zh/index.html 今天順手在開發環境成功安裝了&#xff0c;做下記錄&#xff1a; 1、ABA…

hot100-貪心算法(附圖解思路)

貪心算法的核心&#xff0c;就是用局部最優去代替全局最優。一般的步驟就是去試思路&#xff0c;然后舉反例&#xff0c;如果舉不出反例&#xff0c;基本可以看作是正確的方法。121. 買賣股票的最佳時機&#xff08;Best Time to Buy and Sell Stock&#xff09;難度&#xff1…

從齒輪到智能:機器人如何重塑我們的世界【科普類】

新晉碼農一枚&#xff0c;小編會定期整理一些寫的比較好的代碼和知識點&#xff0c;作為自己的學習筆記&#xff0c;試著做一下批注和補充&#xff0c;轉載或者參考他人文獻會標明出處&#xff0c;非商用&#xff0c;如有侵權會刪改&#xff01;歡迎大家斧正和討論&#xff01;…

python超市購物 2025年6月電子學會python編程等級考試一級真題答案解析

python超市購物 2025年6月 python編程等級考試一級真題 博主推薦 所有考級比賽學習相關資料合集【推薦收藏】 1、Python比賽 信息素養大賽Python編程挑戰賽 藍橋杯python選拔賽真題詳解

淺談代理流程自動化 (APA)

一、什么是APA Agentic Process Automation (APA)APA 利用大型語言模型 &#xff08;LLM&#xff09; 自動執行復雜的動態工作流程。它可以自主構建、執行和調整工作流程&#xff0c;同時將人員干預降至最低。與依賴基于規則的系統的傳統機器人流程自動化 &#xff08;RPA&…

LeetCode - 和為K的子數組 / 爬樓梯

?歡迎光臨小站&#xff1a;致橡樹 和為K的子數組 給你一個整數數組 nums 和一個整數 k &#xff0c;請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 示例 1&#xff1a; 輸入&#xff1a;nums [1,1,1], k 2 輸出&#xff1a;2示例…

day40 SQLite3單詞查詢程序設計與實現

day40 SQLite3單詞查詢程序設計與實現 核心知識點 SQLite3 C接口應用&#xff1a;使用sqlite3_open、sqlite3_exec等函數操作數據庫回調函數機制&#xff1a;通過回調函數處理查詢結果集SQL語句構建&#xff1a;動態生成SELECT、INSERT等SQL語句事務處理&#xff1a;使用BEGIN …

GitHub 熱榜項目 - 日榜(2025-09-08)

GitHub 熱榜項目 - 日榜(2025-09-08) 生成于&#xff1a;2025-09-08 統計摘要 共發現熱門項目&#xff1a;17 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術趨勢&#xff1a;AI智能體與LLM應用持續爆發&#xff08;emcie-co/parlant、coleam00…