主頁 > 作業系統 > nginx+uWSGI+django+virtualenv+supervisor發布web服務器

nginx+uWSGI+django+virtualenv+supervisor發布web服務器

2020-10-05 10:20:38 作業系統

  導論

WSGI是Web服務器網關介面,它是一個規范,描述了Web服務器如何與Web應用程式通信,以及Web應用程式如何鏈接在一起以處理一個請求,(接收請求,處理請求,回應請求)
基于wsgi運行的框架有bottle,DJango,Flask,用于決議動態HTTP請求
支持WSGI的服務器
    wsgiref
        python自帶的web服務器
    Gunicorn
        用于linux的 python wsgi Http服務器,常用于各種django,flask結合部署服務器,
    mode_wsgi
        實作了Apache與wsgi應用程式的結合
    uWSGI
        C語言開發,快速,自我修復,開發人員友好的WSGI服務器,用于Python Web應用程式的專業部署和開發,

在部署python程式web應用程式時,可以根據性能的需求,選擇合適的wsgi server,不同的wsgi server區別在于并發支持上,有單執行緒,多行程,多執行緒,協程的區別,其功能還是近似,無非是請求路由,執行對應的函式,回傳處理結果,




Django部署

Django的主要部署平臺是 WSGI,這是用于Web服務器和應用程式的Python標準,

Django的 startproject管理命令設定一個簡單的默認WSGI配置,可以根據需要為您的專案進行調整,并指示任何符合WSGI的應用程式服務器使用,

application 
使用WSGI部署的關鍵概念是應用程式服務器用于與代碼通信的 application 可呼叫,它通常在服務器可訪問的Python模塊中作為名為 application 的物件提供,

startproject 命令創建包含這樣的 application 可呼叫的檔案 <project_name>/wsgi.py. ,它被Django的開發服務器和生產WSGI部署使用,
WSGI服務器從其配置中獲取 application 可呼叫的路徑, Django的內置服務器,即 runserver 命令,從 WSGI_APPLICATION 設定讀取它,

 

復制代碼
1 首先nginx 是對外的服務介面,外部瀏覽器通過url訪問nginx,

2nginx 接收到瀏覽器發送過來的http請求,將包進行決議,分析url,如果是靜態檔案請求就直接訪問用戶給nginx配置的靜態檔案目錄,直接回傳用戶請求的靜態檔案,

如果不是靜態檔案,而是一個動態的請求,那么nginx就將請求轉發給uwsgi,uwsgi 接收到請求之后將包進行處理,處理成wsgi可以接受的格式,并發給wsgi,wsgi 根據請求呼叫應用程式的某個檔案,某個檔案的某個函式,最后處理完將回傳值再次交給wsgi,wsgi將回傳值進行打包,打包成uwsgi能夠接收的格式,uwsgi接收wsgi 發送的請求,并轉發給nginx,nginx最終將回傳值回傳給瀏覽器,

3要知道第一級的nginx并不是必須的,uwsgi完全可以完成整個的和瀏覽器互動的流程,但是要考慮到某些情況

1 安全問題,程式不能直接被瀏覽器訪問到,而是通過nginx,nginx只開放某個介面,uwsgi本身是內網介面,這樣運維人員在nginx上加上安全性的限制,可以達到保護程式的作用,

2負載均衡問題,一個uwsgi很可能不夠用,即使開了多個work也是不行,畢竟一臺機器的cpu和記憶體都是有限的,有了nginx做代理,一個nginx可以代理多臺uwsgi完成uwsgi的負載均衡,

3靜態檔案問題,用django或是uwsgi這種東西來負責靜態檔案的處理是很浪費的行為,而且他們本身對檔案的處理也不如nginx好,所以整個靜態檔案的處理都直接由nginx完成,靜態檔案的訪問完全不去經過uwsgi以及其后面的東西,
復制代碼 為什么要用nginx,uwsgi

 

復制代碼
1.單機啟動django專案,性能低,默認使用wsgiref模塊,性能低的wsgi協議

python3 manager.py runserver 0.0.0.0:8000   > wsgiref模塊中

2.高并發啟動django,django是沒有這個功能的,而uWSGI模塊,遵循uwsgi協議,支持多行程處理django請求

uwsgi  通過他,啟動你的django,而不再是python3 manager.py runserver 0.0.0.0:8000


3.公司中一般用 nginx + uwsgi + django + virtualenv  + supervisord(行程管理工具)


搭建筆記:
    1.確定依賴組件是否安裝
    yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
    
    

    
    
nginx 正向代理,反向代理的概念




用戶阿段,去訪問mycrm.com:80 ,他想直接從80埠,找到hello視圖,也就是mycrm.com:80/hello 
實作手段就是,阿段去訪問 mycrm.com:80 這個nginx服務,并且讓nginx,把hello這個請求,丟給后端的 uwsgi+django程式處理

1.基礎環境準備好
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

2.準備好python3環境

3.準備好virtualenv 

4.安裝uWSGI
    1.激活虛擬環境
    source /opt/all_venv/venv2/bin/activate
    
    2.安裝uWSGI
    (venv2) [root@s13linux ~ 05:18:21]$pip3 install uwsgi
    
    3.檢查uwsgi版本
        (venv) [root@slave 192.168.11.64 /opt]$uwsgi --version
        2.0.17.1
        #檢查uwsgi python版本
        uwsgi --python-version
    
    4.運行一個簡單的uwsgi服務器
        1.創建一個test.py檔案,寫入內容
        def application(env, start_response):
            start_response('200 OK', [('Content-Type','text/html')])
            return [b"Hello World"] # python3
            
        2.然后用uwsgi命令啟動
        uwsgi --http :8000 --wsgi-file test.py
            引數解釋
            http :8000: 使用http協議,埠8000
            wsgi-file test.py: 加載指定的檔案,test.py
        
    5.用uwsgi運行你的django專案(測驗使用)
        1.準備好mysite,自己寫好MTV視圖函式  /hello 
    
    先確保你在專案檔案夾下,例如/opt/mysite/底下
    
    uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1 
        引數決議
            --http 啟動在8088埠,--module 指定專案檔案夾路徑  --py-autoreload是熱加載程式
    
    6.配置nginx反向代理uwsgi+django!!!!(此步重要!!!)
        1.首先kill殺掉nginx行程
        2.配置nginx.conf,通過此步才能生效!!
            填入重要兩個引數,根據自己目錄結構配置,uwsgi_pass通過這個引數,nginx才能轉發請求給后端0.0.0.0:9000的應用
            include  /opt/nginx112/conf/uwsgi_params;
            uwsgi_pass 0.0.0.0:9000;
        --------------------------分割線--------------------------------------------------------
             server {
                    listen       80;
                    server_name  mycrm.com;
                    location / {
                        include  /opt/nginx112/conf/uwsgi_params;
                        uwsgi_pass 0.0.0.0:9000;
                        root   html;
                        index  index.html index.htm;
                        #deny 10.0.0.1;
        }
        
        配置nginx.conf之后,啟動nginx服務,等待配置啟動uwsgi+django 
    
    7.配置supervisor行程管理工具
        1.通過python2的包管理工具easy_install安裝
        yum install python-setuptools
        easy_install supervisor
        
        2.通過命令生成supervisor的配支檔案
        echo_supervisord_conf > /etc/supervisord.conf
        
        3.寫入/etc/supervisord.conf配置資訊(引數根據自己環境填寫)
        [program:my_crm]
        command=/opt/all_venv/venv2/bin/uwsgi --uwsgi 0.0.0.0:9000 --chdir=/opt/s13crm --home=/opt/all_venv/venv2/ --module=s13crm.wsgi
        directory=/opt/s13crm
        startsecs=0
        stopwaitsecs=0
        autostart=true
        autorestart=true
    
    8.啟動supervi服務,(同時啟動uwsgi+django服務)
        最后啟動supervisor,完成uWSGI啟動django,nginx反向代理
        supervisord -c /etc/supervisord.conf #啟動supervisor
        supervisorctl -c /etxc/supervisord.conf restart my  #重啟my專案
        supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]

    9.此時訪問網站mycrm.com ,查看是否可以通過80埠,訪問到django應用,完成專案發布,
        由于nginx的高并發性能,配合uwsgi的多行程性能,可以達到一個線上的django應用發布!!!
        
                                                                        謝謝大家!
    
內容博客地址:
https://www.cnblogs.com/pyyu/p/9481344.html
    
    
    
復制代碼 13期課程筆記

 

nginx官網

http://nginx.org/en/

nginx有關uwsgi模塊介紹

http://nginx.org/en/docs/http/ngx_http_uwsgi_module.html

 

大家都學過了django,用django寫了各種功能,寫了bbs專案,寫了路飛學城,

咱們都知道django是一個web框架,方便我們快速開發web程式,http請求的動態資料就是由web框架來提供處理的,

前面超哥也對nginx簡單的介紹了,本文將nginx、WSGI、uwsgi、uWSGI、django這幾個關系梳理一下,

wsgi    全稱web server gateway interface,wsgi不是服務器,也不是python模塊,只是一種協議,描述web server如何和web application通信的規則,
運行在wsgi上的web框架有bottle,flask,django
uwsgi    和wsgi一樣是通信協議,是uWSGI服務器的單獨協議,用于定義傳輸資訊的型別
uWSGI    是一個web服務器,實作了WSGI協議,uwsgi協議,a
nginx    web服務器,更加安全,更好的處理處理靜態資源,快取功能,負載均衡,因此nginx的強勁性能,配合uWSGI服務器會更加安全,性能有保障,
django 高級的python web框架,用于快速開發,解決web開發的大部分麻煩,程式員可以更專注業務邏輯,無須重新造輪子

邏輯圖

 

 

web服務器

傳統的c/s架構,請求的程序是
客戶端 > 服務器 
服務器 > 客戶端
服務器就是:1.接收請求 2.處理請求 3.回傳回應

web框架層

HTTP的動態資料交給web框架,例如django遵循MTV模式處理請求,
HTTp協議使用url定位資源,urls.py將路由請求交給views視圖處理,然后回傳一個結果,完成一次請求,
web框架使用者只需要處理業務的邏輯即可,

如果將一次通信轉化為“對話”的程序

Nginx:hello wsgi,我剛收到一個請求,你準備下然后讓django來處理吧

WSGI:好的nginx,我馬上設定環境變數,然后把請求交給django

Django:謝謝WSGI,我處理完請求馬上給你回應結果

WSGI:好的,我在等著

Django:搞定啦,麻煩wsgi吧回應結果傳遞給nginx

WSGI:太棒了,nginx,回應結果請收好,已經按照要求傳遞給你了

nginx:好滴,我把回應交給用戶,合作愉快

Django Nginx+uwsgi 安裝配置

在前面的章節中我們使用 python manage.py runserver 來運行服務器,這只適用測驗環境中使用,

正式發布的服務,需要一個可以穩定而持續的服務器,

基礎開發環境配置

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

提前安裝好python3環境

https://www.cnblogs.com/pyyu/p/7402145.html

virtualenv

請確保你的虛擬環境正常作業
https://www.cnblogs.com/pyyu/p/9015317.html

安裝django1.11

pip3 install django==1.11
#創建django專案mysite
django-admin startproject mysite
#創建app01
python3 manage.py startapp app01

mysite/settings.py

#settings.py設定
ALLOWED_HOSTS = ['*']
install app01

mysite/urls.py

from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello_django/', views.hello),
]

app01/views.py

from django.shortcuts import render,HttpResponse

# Create your views here.
def hello(request):
    print('request is :',request)
    return HttpResponse('django is ok ')

安裝uWSGI

進入虛擬環境venv,安裝uwsgi
(venv) [root@slave 192.168.11.64 /opt]$pip3 install uwsgi
檢查uwsgi版本
(venv) [root@slave 192.168.11.64 /opt]$uwsgi --version
2.0.17.1
#檢查uwsgi python版本
uwsgi --python-version

運行簡單的uWSGI

#啟動一個python
uwsgi --http :8000 --wsgi-file test.py
  • http :8000: 使用http協議,埠8000
  • wsgi-file test.py: 加載指定的檔案,test.py
#test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3

uWsgi熱加載python程式

在啟動命令后面加上引數
uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1 
#發布命令
command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi
#此時修改django代碼,uWSGI會自動加載django程式,頁面生效

運行django程式

#mysite/wsgi.py  確保找到這個檔案
uwsgi --http :8000 --module mysite.wsgi
  • module mysite.wsgi: 加載指定的wsgi模塊

uwsgi組態檔

復制代碼
uwsgi支持ini、xml等多種配置方式,本文以 ini 為例, 在/etc/目錄下新建uwsgi_nginx.ini,添加如下配置:

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /opt/mysite
# Django's wsgi file
module          = mysite.wsgi
# the virtualenv (full path)
home            = /opt/venv
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 1
# the socket (use the full path to be safe
socket          = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
復制代碼 uwsgi.ini

指定組態檔啟動命令

uwsgi --ini  /etc/uwsgi_nginx.ini

配置nginx結合uWSGI

配置nginx.conf

worker_processes  1;
error_log  logs/error.log;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    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  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
  #nginx反向代理uwsgi server { listen 80; server_name 192.168.11.64; location / {
     #nginx自帶ngx_http_uwsgi_module模塊,起到nginx和uwsgi互動作用
#通過uwsgi_pass設定服務器地址和協議,講動態請求轉發給uwsgi處理 include /opt/nginx1-12/conf/uwsgi_params; uwsgi_pass 0.0.0.0:8000; root html; index index.html index.htm; }
     #nginx處理靜態頁面資源
     location /static{
        alias /opt/nginx1-12/static;   
}
     #nginx處理媒體資源
     location /media{
        alias /opt/nginx1-12/media;  
         }
error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

配置完啟動nginx

supervisor

supervisor 是基于 python 的任務管理工具,用來自動運行各種后臺任務,當然你也能直接利用 nohup 命令使任務自動后臺運行,但如果要重啟任務,每次都自己手動 kill 掉任務行程,這樣很繁瑣,而且一旦程式錯誤導致行程退出的話,系統也無法自動多載任務,

這里超哥要配置基于virtualenv的supervisor

由于supervisor在python3下無法使用,因此只能用python2去下載!!!!!!

#注意此時已經退出虛擬環境了!!!!!
yum install python-setuptools
easy_install supervisor

通過命令生成supervisor的配支檔案

echo_supervisord_conf > /etc/supervisord.conf

然后再/etc/supervisord.conf末尾添加上如下代碼!!!!!!

supervisord.conf組態檔引數解釋
[program:xx]是被管理的行程配置引數,xx是行程的名稱
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程式啟動命令
autostart=true       ; 在supervisord啟動的時候也自動啟動
startsecs=10         ; 啟動10秒后沒有例外退出,就表示行程正常啟動了,默認為1秒
autorestart=true     ; 程式退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected,表示行程意外殺死后才重啟
startretries=3       ; 啟動失敗自動重試次數,默認是3
user=tomcat          ; 用哪個用戶啟動行程,默認是root
priority=999         ; 行程啟動優先級,默認999,值小的優先啟動
redirect_stderr=true ; 把stderr重定向到stdout,默認false
stdout_logfile_maxbytes=20MB  ; stdout 日志檔案大小,默認50MB
stdout_logfile_backups = 20   ; stdout 日志檔案備份數,默認是10
; stdout 日志檔案,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志檔案)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;默認為false,行程被殺死時,是否向這個行程組發送stop信號,包括子行程
killasgroup=false     ;默認為false,向行程組發送kill信號,包括子行程

 

[program:my]
#command=/opt/venv/bin/uwsgi --ini  /etc/uwsgi_nginx.ini  #這里是結合virtualenv的命令 和supervisor的精髓!!!!
command= /home/venv/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /opt/mysite --home=/home/venv --module mysite.wsgi
#--home指的是虛擬環境目錄 --module找到 mysite/wsgi.py

最后啟動supervisor,完成uWSGI啟動django,nginx反向代理

supervisord -c /etc/supervisord.conf #啟動supervisor
supervisorctl -c /etxc/supervisord.conf restart my #重啟my專案
supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]

 重新加載supervisor

一、添加好組態檔后

二、更新新的配置到supervisord    

supervisorctl update
三、重新啟動配置中的所有程式

supervisorctl reload
四、啟動某個行程(program_name=你配置中寫的程式名稱)

supervisorctl start program_name
五、查看正在守候的行程

supervisorctl
六、停止某一行程 (program_name=你配置中寫的程式名稱)

pervisorctl stop program_name
七、重啟某一行程 (program_name=你配置中寫的程式名稱)

supervisorctl restart program_name
八、停止全部行程

supervisorctl stop all
注意:顯示用stop停止掉的行程,用reload或者update都不會自動重啟,

 django的靜態檔案與nginx配置

mysite/settings.py

STATIC_ROOT='/opt/nginx1-12/static'
STATIC_URL = '/static/'
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,"static"),
]

上述的引數STATIC_ROOT用在哪?

通過python3 manage.py collectstatic 收集所有你使用的靜態檔案保存到STATIC_ROOT!

STATIC_ROOT 檔案夾 是用來將所有STATICFILES_DIRS中所有檔案夾中的檔案,以及各app中static中的檔案都復制過來
# 把這些檔案放到一起是為了用nginx等部署的時候更方便

 

參考檔案:http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html

 uwsgi熱加載:https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Management.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/157124.html

標籤:Linux

上一篇:nginx負載均衡

下一篇:部署你的CRM程式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more