原文地址:http://www.javashuo.com/article/p-ekkorlhu-em.html
Nginx+uWSGI+Django部署web服務器
環境說明
前言
搭建項目
Django部署
編輯luffy/luffy/settings.py
編輯luffy/app01/views.py
編輯luffy/luffy/urls.py
運行並測試
uWSGI部署
測試運行uWSGI
使用uWSGI運行django項目
uWSGi熱加載Djangoa項目
部署nginx
nginx配置uwsgi和django
django部署static文件
從新加載nginx進行測試
測試nginx 應用 uWSGI 和 test.py
用UNIX socket取代TCP port
uwsgi部署增強
使用uwsgi配置文件運行django項目
安裝uWSGI到真實環境中
uwsgi配置文件更多參數
uWSGI開機啓動服務
環境說明
進行本文操做前需己搭建好的環境
linux系統,我用的是openSUSE
使用了operation用戶的家目錄作爲測試環境
python3.5.6
virtualenv 16.0
pip3 18.0
nginx 1.13.1
後面進行安裝的環境
django 1.11
uwsgi-2.0.17.1
前言
在多年前,基於python的web項目,常見的部署方法有:html
fcgi:用spawn-fcgi或者框架自帶的工具對各個project分別生成監聽進程,而後和http服務互動。
wsgi:利用http服務的mod_wsgi模塊來跑各個project。
不過uwsgi出現後,大部份部署就不會使用以上的兩個協議了。
由於uwsgi它既不用wsgi協議也不用fcgi協議,而是自創了一個uwsgi的協議,據做者說該協議大約是fcgi協議的10倍那麼快。uWSGI的主要特色以下:前端
超快的性能。
低內存佔用(實測爲apache2的mod_wsgi的一半左右)。
多app管理。
詳盡的日誌功能(能夠用來分析app性能和瓶頸)。
高度可定製(內存大小限制,服務必定次數後重啓等)。
因此在uwsgi協議的基礎上,配合nginx來作python(類如django的框架)的web項目部署就很常見了。python
uwsgi 實際上也是一個 http 服務器,只不過它只面向 python 的網絡應用程序。
雖然 uwsgi 也是 http 服務器,可是卻不便直接使用它部署 python web 應用程序。linux
uwsgi 所扮演的的角色是後端 http 服務器,nginx 扮演的角色是前端 http 服務器,django項目 是客戶所真正要訪問到的提供數據方。 用戶從網頁瀏覽器中發出請求,nginx 服務器收到請求後,會經過它的 uwsgi 模塊將用戶的請求轉發給 uwsgi 服務器,uwsgi 服務器經過django處理完畢後將結果返回給 nginx,瀏覽器將最終的結果展示給用戶。nginx
搭建項目
創建一個虛擬環境git
建議我的學習和測試的話,直接建在家用戶目錄下,以免權限引發的各類拒絕問題
或者正式點,系統再建一個dev用戶,在專門的工做目錄下給好dev用戶的權限去運行。
虛擬環境的目錄名建議就帶個env點明是虛擬環境,若是和後面的項目取相同的名字你會看到三重同名的串在一塊兒,有點不太好認。
virtualenv -p python3 py3env
啓動虛擬環境
source py3env/bin/activategithub
安裝django1.11,之因此裝這個版本是學習所須要,後面本身的項目最好與時俱進。
pip install django==1.11web
直接使用django-admin命令建立一個django項目apache
建議不要放在py3env目錄下,而是在專門的工做目錄下創建
django-admin startproject luffy
以下,己經初步搭建好簡單的項目:django
cd luffy
(py3env) operation@opensuse-wordpress:~/work/luffy> tree -L 2
.
├── luffy
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
1
2
3
4
5
6
7
8
9
10
建立新應用,例如app01
python3 manage.py startapp app01
結構以下
(py3env) operation@opensuse-wordpress:~/work/luffy> tree -L 2
.
├── app01
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── luffy
│ ├── __init__.py
│ ├── __pycache__
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Django部署
編輯luffy/luffy/settings.py
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = ['*', ]
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
如上,主要是:
將DEBUG由True改爲False(雖然只是在學習和測試搭建的,也要顧及好安全)
在ALLOWED_HOSTS 默認的空列表中填入你本身打算使用的域名,我這裏測試的時候填的是*,真正上線部署的時候不建議填成通配符的*,而是要填容許訪問的主機域名。通常django用於作後端服務器,而前端會有一個域名。詳情可見django官方文檔。
INSTALLED_APPS 列表下增長appo1,表示將app01應用給安裝註冊上。
補充,後面配置好nginx和新建好域名以後,我將ALLOWED_HOSTS = ['*', ]修改爲ALLOWED_HOSTS = ['luffy.tielemao', ]了,經過域名訪問仍然正常。而直接敲ip地址則會報400錯誤。
編輯luffy/app01/views.py
from django.shortcuts import render,HttpResponse
# Create your views here.
def index(request):
return HttpResponse('Hello Hero')
1
2
3
4
5
6
因爲只是簡單演示,因此上面只是讓用戶訪問index頁面後,獲得一個顯示Hello Hero的頁面。
編輯luffy/luffy/urls.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
]
1
2
3
4
5
6
7
8
運行並測試
首先是運行,因爲是單獨對django進行運行測試,因此只是在進入項目根目錄後命令行敲如下命令:
python manage.py runserver 0.0.0.0:8083
其中0.0.0.0表示捆綁監聽服務器上的全部網卡IP地址,固然也就包括了127.0.0.1和外網的公網ip了。
最初我測試的是ALLOWED_HOSTS填的容許的HOSTS是本身的域名.tielemao.com,結果直接在瀏覽器上敲IP加8083端口接index固然是報錯:
Bad Request(400)而因爲我將DEBUG值設爲了False,因此也不會將調試信息暴露出來。
而後我將.tielemao.com改成了通配符*(不安全,表示容許全部主機頭)。
再訪問http://39.x.x.x:8083/index/的時候,就能正常訪問到了:
注意,我使用的是8083端口而且在防火牆和雲控制平臺上的安全組處己設置了開放該端口。
django能運行無誤後,ctrl+c將它中止,再接下來作下面的操做。
uWSGI部署
一樣爲了環境的隔離和純淨,此次我也選擇在一樣的虛擬環境下安裝:
pip3 install uwsgi
安裝完成後可uwsgi --version查看版本,
uwsgi --python-version還能夠間接查看到python的版本。
編寫一個用於簡單測試uwsgi的python腳本
vim test-uwsgi.py,內容以下:
def application(env,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return [b"Hello Hero, all for one "]
1
2
3
測試運行uWSGI
如下命令表示運行uwsgi服務,一樣是在8083端口上開放web訪問。
* 注意--http 後是一個空格再接:端口號。
uwsgi --http :8083 --wsgi-file test-uwsgi.py
訪問web服務器8083端口,正常顯示test-uwsgi.py腳本中返回顯示的文本。
由於咱們如今要作的是基於nginx和uwsgi部署django,從客戶端發起請求到服務器響應請求,會通過一下幾個環節:
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django
1
而單獨測試uWSGI運行,訪問顯示正常的話,說明下面3個環節是通暢的:
the web client <-> uWSGI <-> Python
1
ctrl+c停止程序,再來進行如下的測試。
使用uWSGI運行django項目
在虛擬環境下,進入到django根目錄下後敲如下命令:
uwsgi --http :8000 --module luffy.wsgi
1
效果和直接敲如下命令
python manage.py runserver 0.0.0.0:8000
1
是同樣的。
注:--module luffy.wsgi爲加載指定的wsgi模塊,你項目起的是什麼名字,通常就是項目名.wsgi。
這樣測試下來,可證實web客戶端經過uWSGI到Django是通暢的:
the web client <-> uWSGI <-> Django
1
ctrl+c停止程序,再來進行如下的測試
uWSGi熱加載Djangoa項目
在啓動命令後面加上參數:
uwsgi --http :8083 --module luffy.wsgi --py-autoreload=1
1
一樣,這個時候訪問服務器8083端口,也就是訪問了django項目(luffy)。
並且還多了一個參數:
--py-autoreload 監控python模塊以觸發重載(僅在開發中使用)
# 相似的發佈命令
/home/operation/work/py3env/bin/uwsgi --http 0.0.0.0 :8000 --chdir /home/operation/work/luffy --module luffy.wsgi
# 此時修改django代碼,uWSGI會自動加載django程序,頁面生效
# 除此外,還能夠接上不少參數
1
2
3
4
ctrl+c停止程序,再進行下面環節:
部署nginx
nginx配置uwsgi和django
將uwsgi_params文件拷貝到項目文件夾下。
uwsgi_params文件通常在/etc/nginx/目錄下,也能夠從nginx的github頁面下載。
uwsgi_params配置文件以下:
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
拷貝到項目下:
sudo cp /etc/nginx/uwsgi_params /home/operation/work/luffy/
屬主屬組等權限從新修改
sudo chown operation:operation uwsgi_params
sudo chmod 664 /home/operation/work/luffy/uwsgi_params
1
2
在項目文件夾下建立文件luffy_nginx.conf,填入並修改下面內容:
# luffy_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock;
# for a file socket
server 127.0.0.1:8083;
# for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 8000;
# the domain name it will serve for
server_name luffy.tielemao.com;
# substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /home/operation/work/luffy/media;
# your Django project's media files - amend as required
}
location /static {
alias /home/operation/work/luffy/static;
# your Django project's static files - amend as required
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /home/operation/work/luffy/uwsgi_params;
# the uwsgi_params file you installed
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
這個配置文件告訴nginx從文件系統中拉起media和static文件做爲服務,
同時響應django的request。
爲此,我也在相應的項目目錄下先創建起media和static文件夾。
爲方便nginx使用,我在/etc/nginx/vhosts.d下建立了一個luffy_nginx.conf的軟連接。固然,也有人是直接用默認的sites-enabled目錄,本身看着來就好了。
sudo ln -s /home/operation/work/luffy/luffy_nginx.conf luffy.conf
1
django部署static文件
在項目文件夾下,創建好靜態文件目錄:
mkdir static
django的setting文件中,添加一行:
STATIC_ROOT = os.path.join(BASE_DIR, 「static/」)
運行
python manage.py collectstatic
在項目文件夾下,創建一個media媒體文件目錄(用於存放圖片音樂等文件作測試)
mkdir media
在media目錄中,我傳入了一個圖片文件princekin_fox.jpg用於測試nginx。
參數STATIC_ROOT用在哪?
經過python3 manage.py collectstatic收集全部你使用的靜態文件保存到STATIC_ROOT!
STATIC_ROOT 文件夾 是用來將全部STATICFILES_DIRS中全部文件夾中的文件,以及各app中static中的文件都複製過來,把這些文件放到一塊兒是爲了用nginx等部署的時候更方便。
從新加載nginx進行測試
先進行檢測,看以前的配置文件有無錯誤。
sudo /usr/sbin/nginx -t
從新加載nginx讓軟連接的luffy_nginx.conf生效。
sudo /usr/sbin/nginx -s reload
訪問http://luffy.tielemao.com:8000/media/princekin_fox.jpg看可否正常訪問到圖片資源:
注意在作這一步以前,我是己經配置好域名和傳送了一個用於測試的圖片到服務器上。
我己經能成功訪問到資源了,因此接下來再作下一步測試。
測試nginx 應用 uWSGI 和 test.py
還記得以前寫好的一個測試的test-uwsgi.py文件嗎?
咱們就用配置好的nginx來訪問uwsgi啓動的test-uwsgi.py好了。
首先,啓動uwsgi,而且端口是nginx配置中的負載均衡池8083端口:
uwsgi --socket :8083 --wsgi-file test-uwsgi.py
訪問http://luffy.tielemao.com:8000/,實際上訪問的就是uwsgi的8083端口。
如上圖,能正常訪問。代表下面的環節通暢:
the web client <-> the web server <-> the socket <-> uWSGI <-> Python
1
測試成功後停止程序,以便進行下面環節。
用UNIX socket取代TCP port
修改luffy_nginx.conf:
# luffy_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
server unix:///home/operation/work/luffy/luffy.sock;
# for a file socket
# server 127.0.0.1:8083;
# for a web port socket (we'll use this first)
}
1
2
3
4
5
6
7
8
9
10
上面實際上是將原來的server 127.0.0.1:8083加以註釋,而原來加了#註釋的server unix:///home/operation/work/luffy/luffy.sock則取消了註釋,也就是否是直接指定端口,而是指定了一個sock文件。
要注意的是,這個luffy.sock並非本身提早寫好的什麼配置文件,而是由程序自動生成的。如圖:
從新加載nginx,而後在項目下運行uWSGI
uwsgi --socket /home/operation/work/luffy/luffy.sock --wsgi-file test-uwsgi.py
1
訪問http://luffy.tielemao.com:8000/ 報502網關錯誤。
檢查nginx的錯誤日誌error.log,通常位置會在/var/log/nginx/error.log,建議使用tail察看文件尾部的後10行。
會發現相似如下報權限受阻的錯誤:
2018/08/27 20:17:44 [crit] 25771#25771: *1847865 connect() to unix:///home/operation/work/luffy/luffy.sock failed (13: Permission denied) while connecting to upstream, client: 223.72.74.11, server: luffy.tielemao.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///home/operation/work/luffy/luffy.sock:", host: "luffy.tielemao.com:8000"
1
那麼就停止uwsgi進程,添加上socket權限後再次運行:
uwsgi --socket /home/operation/work/luffy/luffy.sock --wsgi-file test-uwsgi.py --chmod-socket=664
1
仍是報錯的話,就需將operation用戶添加到nginx組中了,固然某些系統中nginx組也多是www-data。
將operation用戶添加到nginx組中,記得要加上-a參數,否則operation將會離開原來的operation組。
sudo usermod -a -G nginx operation
1
而後將項目目錄也歸屬到nginx組中
sudo chown operation:nginx -R luffy
1
這樣就能保證nginx能對luffy.sock有足夠的權限了。
果真,設置好權限後,就能正常訪問了。
每次都運行上面命令來拉起django項目實在不方便,咱們能夠將這些配置寫在.ini文件中,能大大簡化工做。
停掉uwsgi服務後,見下一環節。
uwsgi部署增強
使用uwsgi配置文件運行django項目
uwsgi支持ini,xml等多種配置方式,以ini爲例,在/home/operation/work/conf目錄下新建uwsgi_luffy.ini,示例配置以下:
# luffy_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
# 指定運行目錄,其實就是項目的根目錄
chdir = /home/operation/work/luffy
# Django's wsgi file
# 導入django項目的wsgi模塊
module = luffy.wsgi:application
# 載入wsgi-file
wsgi-file = luffy/wsgi.py
# the virtualenv (full path)
# 配置虛擬環境python相關依賴包所在路徑
home = /home/operation/work/py3env
# 補充,uwsgi啓動時的用戶和用戶組,注意要按你本身的實際權限進行配置
# 我這邊是由於項目屬主是operation,而operation我設置了添加進了nginx組
# 但這種狀況下uid仍不能設置nginx,除非你的項目目錄全部文件屬主都改成了nginx
uid = operation
gid = nginx
# process-related settings
# 開啓master主進程
master = true
# maximum number of worker processes
# 開啓多少個進程數,workers項也等同processes
# threads項則是設置運行線程,測試倒不用設置上線程
processes = 4
# the socket (use the full path to be safe)
# 設置使用的socket端口或socket地址
# socket = 0.0.0.0:8000
# 上面的socket建議配置成一個luffy.socket文件後使用nginx來鏈接uWSGI運行,否則容易報socket的請求頭錯誤和權限錯誤等。
socket = /home/operation/work/luffy/luffy.socket
# ... with appropriate permissions - may be needed
# 配置生成的sock文件的權限
chmod-socket = 664
# clear environment on exit
# 退出時清空環境,其實就是將自動生成的luffy.sock和相關pid文件給幹掉。
vacuum = true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
uwsgi指定配置文件啓動django項目,建議使用nginx用戶執行:
uwsgi --ini /home/operation/work/conf/uwsgi_luffy.ini
注:以上啓動後若是你是在配置文件中直接指定的socket = 0.0.0.0:8000可能會產生以下問題:瀏覽器訪問服務器8000端口加上url後,瀏覽器會報鏈接出錯,而服務器運行後臺也會看到以下錯誤信息:
invalid request block size: 21573 (max 4096)...skip
以前咱們直接使用http協議的方式就不會出現塊請求大小超出
uwsgi --http :8000 --module luffy.wsgi
1
究其緣由,使用配置文件啓動是以socket方式提供通訊端口,默認的協議是tcp,和http不一樣。socket請求頭默認大小是4096,因此請求頭超出默認大小後就會出現錯誤。固然後面咱們能夠經過和nginx合做的方式解決。
而若是隻是想測試,那麼只要在上面的命令後面再指定塊請求大小-b 24576之類的即可以解決。
咱們停止uwsgi後從新指定塊大小,運行命令:
uwsgi -b 24576 --ini /home/operation/work/conf/uwsgi_luffy.ini
能夠解決請求頭錯誤。
不過ini配置文件主要是用於和nginx配合,這也是爲何前面講述完nginx的部署後再回過頭來說uwsgi的ini配置文件。
將uWSGI中使用的相同選項放入一個配置文件中,而後要求uWSGI使用該文件運行。這會使得管理配置變得更加容易。
要注意的是,由於要配合nginx,因此生成的項目名.sock文件,nginx須要能有權限讀寫。
以下圖:
因爲我前面執行uwsgi命令時使用的是operation用戶,
這樣子自動生成的luffy.sock文件屬組並非nginx的,因此ini配置文件中最好加上uid和gid的配置項使用nginx用戶執行uwsgi。
# uwsgi啓動用戶名和用戶組
uid = operation
gid = nginx
1
2
3
我是修改完luffy.sock的屬組爲nginx後就能正常訪問到django項目了,否則會被nginx報502錯誤。
安裝uWSGI到真實環境中
到目前爲止,咱們都是在虛擬環境下工做的,接下來介紹將uwsgi裝在實際環境中,且將uwsgi加入到nginx組(有的是www-data組)中,就可避免如今所遇到的權限等問題。
退出虛擬環境
deactivate
安裝uWSGI,注意要使用python3中的pip3來進行安裝。我係統中是python2.7和python3.5.6共存的,不過默認的環境是2.7。
sudo /usr/local/python3.5.6/bin/pip3 install uwsgi
以前我使用默認的pip進行安裝,結果是python2版本的uwsgi,在運行虛擬環境中的python3的django項目時會報如下錯誤:
Python version: 2.7.13 (default, Jan 03 2017, 17:41:54) [GCC]
Set PythonHome to /home/operation/work/py3env
ImportError: No module named site
VACUUM: unix socket /home/operation/work/luffy/luffy.sock removed.
1
2
3
4
報模塊導入錯誤,緣由仍是在於我真實環境使用的是python2.7版本的緣由,ini中配置了虛擬環境家目錄是python3的依賴庫,pip安裝的uwsgi不能正確導入。
再次檢查,在真實環境中是否能如同虛擬環境以前同樣能運行django項目。
固然,因爲我前面的python3沒有導入系統環境中,因此此處仍然要像前面使用python3的pip3同樣,須要打全路徑:
sudo /usr/local/python-3.5.6/bin/uwsgi --ini /home/operation/work/conf/uwsgi_luffy.ini
1
模塊沒法導入的錯誤己排除了,可是還會報一個bind綁定拒絕的錯誤。
出現這個錯誤仍是和文件權限有關,由於我以前uwsgi的ini配置文件中uid設置的用戶是nginx,而項目真正的屬主是operation這個用戶,因此我將uid設置回operation就解決問題了,固然將項目整個屬主設爲nginx用戶也是可行的。
# 由於權限問題踩了很多坑,在此繼續增強強調。
# 注意的是你要按本身的實際環境配置
uid = operation
gid = nginx
1
2
3
4
成功運行uwsgi的截圖我也放出給你們對比一下看吧。
固然,訪問頁面成功的截圖就不放了,和以前測試成功的是同樣的。
uwsgi配置文件更多參數
前面己經給你們看到了uwsgi的ini文件的一些配置參數,在此以luffy項目爲例,再介紹一些經常使用到的參數:
# set an environment variable
# 設置變量環境,其實就是應用上django項目中的settings
env = DJANGO_SETTINGS_MODULE=luffy.settings
# create a pidfile
# 建立pid文件,注意權限,因此通常放置在tmp目錄下
pidfile = /tmp/project-master.pid
# background the process & log
# 後臺運行,有用,基本都會設置上,同時還會輸出日誌
daemonize = /var/log/uwsgi/luffy.log
# 以固定的文件大小(單位kb),進行切割日誌
# 下例爲50M大小一個日誌文件
log-maxsize = 50000000
# 不記錄請求信息的日誌。只記錄錯誤以及uWSGI內部消息到日誌中。
disable-logging = true
#
# 在指定的地址上,開啓狀態服務。應該就是你訪問該地址,就能看到整個uwsgi
的狀態,相似nginx也有。因此通常會只在環回地址上開放。
stats = 127.0.0.1:8009
# 如下都是一些性能和資源上的限制和調配
# respawn processes taking more than 20 seconds
harakiri = 20
# limit the project to 128 MB
# 控制進程的總內存量
limit-as = 128
# respawn processes after serving 5000 requests
max-requests = 5000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
訪問stats狀態服務頁面大體以下:
uWSGI開機啓動服務
繼續以django的luffy項目爲例,讓uWSGI開機就啓動服務,編輯文件/etc/rc.local, 添加下面內容到這行代碼以前exit 0:
/usr/local/python-3.5.6/bin/uwsgi --ini /home/operation/work/conf/uwsgi_luffy.ini1要注意的是記得ini配置文件中設置好用戶用戶組,sock文件,sock文件的權限和後臺運行等配置。————————————————版權聲明:本文爲CSDN博主「鐵樂與貓」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/u012145252/article/details/82147440