Files
djangohelper/__pycache__/gunicorn_tab.cpython-38.pyc

144 lines
16 KiB
Plaintext
Raw Normal View History

U
2025-08-29 21:33:35 +08:00
<00><><EFBFBD>hf<00>@s<>ddlZddlmZddlmZmZmZmZmZm Z m
Z
2025-08-28 22:30:17 +08:00
m Z m Z m Z mZmZmZmZddlmZddlmZmZmZmZGdd<07>de<10>ZGdd <09>d e<04>ZdS)
<EFBFBD>N)<01>logger)<0E>QWidget<65> QVBoxLayout<75> QHBoxLayout<75>QLabel<65> QLineEdit<69> QPushButton<6F> QComboBox<6F> QMessageBox<6F> QTextEdit<69> QGroupBox<6F> QGridLayout<75> QProgressBar<61>QDialog<6F>QDialogButtonBox)<01>Qt)<04>GunicornInstallThread<61>GunicornTestThread<61>UploadGunicornServiceThread<61>ManageGunicornServiceThreadcs&eZdZd<06>fdd<03> Zdd<05>Z<04>ZS)<07>PasswordDialogNcs<>t<00><00>|<01>|<00>d<01>|<00>d<02>t<04>}t<05>}|<03>td<03><01>t<08>|_ |j <09>
tj <0B>|<03>|j <09>|<02> |<03>t t jt jB<00>}|j<10>|j<12>|j<13>|j<14>|<02>|<04>|<00>|<02>dS)Nu 输入密码i,u密码:)<16>super<65>__init__<5F>setWindowTitle<6C>setMinimumWidthrr<00> addWidgetrr<00>password_input<75> setEchoMode<64>Password<72> addLayoutr<00>Ok<4F>Cancel<65>accepted<65>connect<63>accept<70>rejected<65>reject<63> setLayout)<05>self<6C>parent<6E>layout<75>password_layoutZ
button_box<EFBFBD><01> __class__<5F><00>Oc:\Users\xiaji\Documents\个人文件夹\夏骥\web应用部署\gunicorn_tab.pyrs 

 

zPasswordDialog.__init__cCs
|j<00><01>S<00>N)r<00>text<78>r(r.r.r/<00> get_password%szPasswordDialog.get_password)N)<06>__name__<5F>
__module__<EFBFBD> __qualname__rr3<00> __classcell__r.r.r,r/r srcs<>eZdZd*<2A>fdd<03> Zdd<05>Zdd<07>Zdd <09>Zd
d <0B>Zd d <0A>Zdd<0F>Z dd<11>Z
dd<13>Z dd<15>Z dd<17>Z dd<19>Zdd<1B>Zdd<1D>Zdd<1F>Zd d!<21>Zd"d#<23>Zd$d%<25>Zd&d'<27>Zd(d)<29>Z<16>ZS)+<2B> GunicornTabNcsJt<00><00>|<01>||_|<00><03>|jrFt|jd<01>rF|jj<05>|j<07>t<08> d<02>dS)N<>server_changedu/Gunicorn标签已连接到服务器切换信号)
rrr)<00>init_ui<75>hasattrr9r#<00>on_server_changedr<00>info)r(r)r,r.r/r*s  zGunicornTab.__init__c s<>t<00>}td<01>}t<02>}|<03>td<02>dd<03>t<05><00>_<06>j<06>d<04>|<03><03>jdd<05>|<03>td<06>dd<03>td<07><01>_|<03><03>jdd<05>|<03>td<08>d d<03>td
<EFBFBD><01>_ |<03><03>j d d<05>|<03>td <0B>d d<03>td <0A><01>_
|<03><03>j
d d<05>t d<0E><01>_ <0C>j j <0A><0E>j<0F>|<03><03>j dd<05>|<02>|<03>|<01>|<02>td<10>}t<02>}t d<11><01>_<11>jj <0A><0E>j<12>|<05><03>jdd<03>t d<12><01>_<13>jj <0A><0E>j<14>|<05><03>jdd<05>t d<13><01>_<15>jj <0A><0E>j<16>|<05><03>jdd<03>t d<14><01>_<17>jj <0A><0E>fdd<16><08>|<05><03>jdd<05>t d<17><01>_<18>jj <0A><0E>fdd<16><08>|<05><03>jd d<03>t d<19><01>_<19>jj <0A><0E>fdd<16><08>|<05><03>jd d<05>t d<1B><01>_<1A>jj <0A><0E>fdd<16><08>|<05><03>jd d<03>t d<1D><01>_<1B>jj <0A><0E>fdd<16><08>|<05><03>jd d<05>|<04>|<05>|<01>|<04>td<1F>}t<00>}t<1C><00>_<1D>j<1D>d <20>|<07><03>j<1D>|<06>|<07>|<01>|<06>td!<21>}t<00>} t<1C><00>_<1E>j<1E>d"<22><00>j<1E>d#<23>| <09><03>j<1E>t <20><00>_!<21>j!<21>"d$<24>| <09><03>j!<21>|<08>| <09>|<01>|<08>td%<25>}
t<02>} t d&<26><01>_#<23>j#j <0A><0E>j$<24>| <0B><03>j#dd<03>t d'<27><01>_%<25>j%j <0A><0E>j&<26>| <0B><03>j%dd<05>|
<EFBFBD>| <0B>|<01>|
<EFBFBD>|<01>'<27><00><00>|<01><00><00><0F>dS)(NuGunicorn配置uDjango项目路径:rz/home/user/django_project<63>u 服务名称:Zdjango_gunicornu端口:<3A><00>8000u工作进程数:<3A><00>3u 加载配置<E9858D>uGunicorn操作u安装Gunicornu测试Gunicornu上传服务文件u 启动服务cs
2025-08-28 22:30:17 +08:00
<00><00>d<01>S)N<>start<72><01>manage_servicer.r2r.r/<00><lambda>c<00>z%GunicornTab.init_ui.<locals>.<lambda>u 停止服务cs
<00><00>d<01>S)N<>stoprEr.r2r.r/rGgrHu 重启服务cs
<00><00>d<01>S)N<>restartrEr.r2r.r/rGkrHu查看服务状态cs
<00><00>d<01>S)N<>statusrEr.r2r.r/rGorHu启用开机自启cs
<00><00>d<01>S)N<>enablerEr.r2r.r/rGsrHuGunicorn服务文件u/Gunicorn服务文件内容将在这里显示...u 操作输出Tu!操作结果将在这里显示...Fu 日志查看u查看访问日志u查看错误日志)(rr r rrr<00>django_path_input<75>setPlaceholderText<78>service_name_input<75>
2025-08-28 22:30:17 +08:00
port_inputZ workers_inputrZload_config_btn<74>clickedr#<00>load_gunicorn_configr'<00>install_gunicorn_btn<74>install_gunicorn<72>test_gunicorn_btn<74> test_gunicorn<72>upload_service_btn<74>upload_service_file<6C>start_service_btn<74>stop_service_btn<74>restart_service_btn<74>status_service_btn<74>enable_service_btnr <00>service_editor<6F> output_text<78> setReadOnlyr<00> progress_bar<61>
setVisibleZview_access_log_btn<74>view_access_logZview_error_log_btn<74>view_error_log<6F>
addStretch) r(r*<00> config_group<75> config_layoutZgunicorn_groupZgunicorn_layoutZ service_groupZservice_layout<75> output_group<75> output_layoutZ log_groupZ
log_layoutr.r2r/r:3s<> 















  

     






2025-08-28 22:30:17 +08:00
zGunicornTab.init_uic
Cs<><00>zj|jr<>t|jd<01>r<>|j<00><02>}|r<>|<01>dd<03>}|<01>dd<05>}|<01>dd<07>}|j<04>|<02>|j<06>|<03>|<00>|<01>}|j<08>|<05>t <09>
d|<02>d |<03><00><04>n
t <09> d
<EFBFBD>n<>t j <0A>t j <0A>t<10>d <0B>}t|d d d<0E><03>}t<12>|<07>}W5QRX|<01>rjd|k<06>rjt|d<00>dk<04>rj|dd}|<08>dd<03>}|<08>dd<05>}|<08>dd<07>}|j<04>|<02>|j<06>|<03>|<00>|<08>}|j<08>|<05>t <09>
d|<02>d |<03><00><04>Wn8tk
<EFBFBD>r<>} zt <09>dt| <09><01><00><02>W5d} ~ XYnXdS)u1加载Gunicorn配置使用config.json中的值<E79A84>get_current_config<69>remote_directory<72><00> project_name<6D> myproject<63>username<6D>www-datau?从当前服务器配置加载Gunicorn配置: remote_directory=z, project_name=u未找到当前服务器配置z config.json<6F>r<>utf-8)<01>encoding<6E>serversru6从配置文件加载Gunicorn配置: remote_directory=u加载Gunicorn配置失败: N)r)r;rj<00>getrM<00>setTextrO<00>!generate_service_file_from_configr^rr=<00>warning<6E>os<6F>path<74>join<69>dirname<6D>__file__<5F>open<65>json<6F>load<61>len<65> Exception<6F>error<6F>str)
r(<00>config<69> django_pathrmro<00>service_content<6E> config_path<74>f<> server_config<69>er.r.r/rR<00>s8
     
  "      
 z GunicornTab.load_gunicorn_configcCsf|<01>dd<02>}|<01>dd<04>}|<01>dd<06>}|<04>d<07><01>}d|<03>d |<02>d
|<02>d |<05>d |<03>d |<05>d|<05>d|<03>d<10>S)u/根据config.json配置生成服务文件内容rorprmrnrkz
2025-08-28 22:30:17 +08:00
/home/user<65>/<2F>'[Unit]
Description=Gunicorn daemon for <20>&
After=network.target
[Service]
2025-08-28 22:30:17 +08:00
User=<3D>
Group=<3D>
2025-08-29 21:33:35 +08:00
WorkingDirectory=u<>
2025-08-28 22:30:17 +08:00
# 所有Gunicorn参数直接在这里配置
ExecStart=/usr/local/bin/gunicorn \
2025-08-29 21:33:35 +08:00
--bind 0.0.0.0:8000 \
2025-08-28 22:30:17 +08:00
--workers $(nproc --all * 2 + 1) \
--worker-class sync \
--timeout 60 \
--name <20> \
--access-logfile <20>7/logs/gunicorn_access.log \
--error-logfile <20>D/logs/gunicorn_error.log \
--log-level info \
<20>h.wsgi:application
Restart=on-failure
RestartSec=5s
PrivateTmp=true
[Install]
WantedBy=multi-user.target)ru<00>rstrip)r(r<>rormr<><00> project_pathr.r.r/rw<00>s*    <02><02><02><02><02><02><02><02>z-GunicornTab.generate_service_file_from_configc Cs<>d}|jr"t|jd<02>r"|jj<02><03>}|r0|<00>|<05>Sd}|}|<02>d<04><01>d|<07><00>}d|<07>d|<06>d|<06>d|<08>d |<03>d
|<07>d |<08>d |<08>d |<07>d<0E>SdS)u保持向后兼容的方法N<E6B395>server_connection_tabrpr<>r<>r<>r<>r<>um
2025-08-28 22:30:17 +08:00
# 所有Gunicorn参数直接在这里配置
ExecStart=/usr/local/bin/gunicorn \
--bind 127.0.0.1:z~ \
--workers $(nproc --all * 2 + 1) \
--worker-class sync \
--timeout 60 \
--name r<>r<>r<>r<>)r)r;r<>rjrwr<>) r(<00> service_namer<65><00>portZworkersr<73>rormr<>r.r.r/<00>generate_service_files6 
2025-08-28 22:30:17 +08:00
<02><02><02><02>
<02><02><02><02><02>z!GunicornTab.generate_service_filecCs$|jr|jjs t<02>|dd<02>dSdS)N<>警告u请先连接服务器FT)r)<00>
ssh_clientr
2025-08-29 21:33:35 +08:00
rxr2r.r.r/<00>check_ssh_connection*sz GunicornTab.check_ssh_connectioncCs<>d}|jr@t|jd<01>r@|jjj<03><04>}t<05>d|r6t|<01>nd<03><00><02>|s<>t<05>d<04>t|<00>}|<02> <09>t
j kr<>|<02> <0C>}t<05>d|r~t|<01>nd<03><00><02>|jr<>t|jd<01>r<>|jjj<03> |<01>nt<05>d<06>dS|S)Nr<4E>u/从server_connection_tab获取密码长度: ru*密码为空弹出密码输入对话框u#从对话框获取密码,长度: u用户取消了密码输入)r)r;r<>rr1rr=r<>r<00>exec_r<00>Acceptedr3rvrx)r(<00>passwordZdialogr.r.r/r30s

zGunicornTab.get_passwordcCs<>|<00><00>s dS|j<01>d<01>|j<03>d<02>|j<05>d<03>|j<05>d<04>|<00><08>}|dkrh|j<03>d<03>|j<05>d<02>dSt |j
j |<01>|_ |j j <0A>|j<0F>|j j<10>|j<11>|j <0C><12>dS)Nu正在安装Gunicorn...FTr)r<>r_<00>appendrS<00>
2025-08-29 21:33:35 +08:00
setEnabledrarb<00>setValuer3rr)r<>Zgunicorn_install_thread<61>progress_updatedr#<00>update_progress<73> result_ready<64>on_install_gunicorn_resultrD)r(r<>r.r.r/rTGs      zGunicornTab.install_gunicorncCs|j<00>|<01>dSr0)rar<>)r(<00>valuer.r.r/r<>\szGunicornTab.update_progresscCsf|j<00>d<01>|j<02>d<02>|r@|j<04>d|<02><00><02>t<06>d|<02><00><02>n"|j<04>d|<02><00><02>t<06>d|<02><00><02>dS)NTFuGunicorn安装成功: uGunicorn安装失败: ) rSr<>rarbr_r<>rr=r<><00>r(<00>success<73>messager.r.r/r<>_s  z&GunicornTab.on_install_gunicorn_resultcCs<>|<00><00>s dS|j<01><02><00><03>}|s0t<04>|dd<02>dS|j<06>d|<01>d<04><03>|j<08> d<05>|j
<EFBFBD> d<06>|j
<EFBFBD> d<07>t |jj|<01>|_|jj<11>|j<13>|jj<14>|j<15>|j<10><16>dS)Nr<4E>u请输入Django项目路径u正在测试Gunicorn <20>...FTr)r<>rMr1<00>stripr
2025-08-29 21:33:35 +08:00
rxr_r<>rUr<>rarbr<>rr)r<>Zgunicorn_test_threadr<64>r#r<>r<><00>on_test_gunicorn_resultrD)r(r<>r.r.r/rVis   zGunicornTab.test_gunicorncCsf|j<00>d<01>|j<02>d<02>|r@|j<04>d|<02><00><02>t<06>d|<02><00><02>n"|j<04>d|<02><00><02>t<06>d|<02><00><02>dS)NTFuGunicorn测试成功: uGunicorn测试失败: ) rUr<>rarbr_r<>rr=r<>r<>r.r.r/r<>|s  z#GunicornTab.on_test_gunicorn_resultcCs<>|<00><00>s dSd}|jr.t|jd<01>r.|jj<03><04>}|r@|<01>dd<03>}nd}d|<02><00>}|j<06><07>}|r`|srt<08> |dd<06>dS|j
2025-08-28 22:30:17 +08:00
<EFBFBD> d|<03>d<08><03>|j <0C> d <09>|<00><0E>}|dkr<>|j <0C> d
<EFBFBD>dSt|jj|||<05>|_|jj<12>|j<14>|j<11><15>dS) Nr<4E>rm<00>django<67> gunicorn_r<5F>u请编辑服务文件内容u正在上传服务文件 r<>FT)r<>r)r;r<>rjrur^<00> toPlainTextr
2025-08-29 21:33:35 +08:00
rxr_r<>rWr<>r3rr<><00> upload_threadr<64>r#<00>on_upload_service_resultrD)r(r<>rmr<>r<>r<>r.r.r/rX<00>s, 
2025-08-28 22:30:17 +08:00

2025-08-29 21:33:35 +08:00
  zGunicornTab.upload_service_filecCsZ|j<00>d<01>|r4|j<02>d|<02><00><02>t<04>d|<02><00><02>n"|j<02>d|<02><00><02>t<04>d|<02><00><02>dS)NTu服务文件上传成功: u服务文件上传失败: )rWr<>r_r<>rr=r<>r<>r.r.r/r<><00>s  z$GunicornTab.on_upload_service_resultcs&<00><01><00>s dSd}<02>jr.t<02>jd<01>r.<2E>jj<03><04>}|r@|<02>dd<03>}nd}d|<03><00>}t<06>d|<01>d|<04><00><04><00>j<08> d|<01>d<07><03><00>j
<EFBFBD>j <0B>j <0C>j <0A>jg<05><00>D]}|<05>d<08>q<><71><01><10>}|dkr<>t<06>d <09><00>D]}|<05>d
<EFBFBD>q<>dSt<06>d t|<06><01>d <0C><03>t<13>jj|||<06><04>_<15>jj<16><17><00>fd d<0E><08><00>j<15><18>dS)Nr<4E>rmr<>r<>u正在执行服务 u 操作,服务名称: u
操作...Fu'未获取到密码取消服务操作Tu获取到密码,长度: u*创建ManageGunicornServiceThread线程cs<00><01>||<01><00>Sr0)<01>on_manage_service_result)<02>s<>m<><02>buttonsr(r.r/rG<00>rHz,GunicornTab.manage_service.<locals>.<lambda>)r<>r)r;r<>rjrurr=r_r<>rYrZr[r\r]r<>r3rxr<>rr<>Z manage_threadr<64>r#rD)r(<00>actionr<6E>rmr<><00>btnr<6E>r.r<>r/rF<00>s6 
 <04> 
 zGunicornTab.manage_servicecCs<>|D]}|<04>d<01>q|r<|j<01>d|<02><00><02>t<03>d|<02><00><02>nP|j<01>d|<02><00><02>t<03>d|<02><00><02>d|<02><06>ksvd|<02><06>kr<>|j<01>d<06>t<03>d<07>dS)NTu服务操作成功: u服务操作失败: r<><00>sudouF提示请检查sudo密码是否正确或尝试重新输入密码u?检测到可能的密码问题,提示用户重新输入密码)r<>r_r<>rr=r<><00>lowerrx)r(r<>r<>r<>r<>r.r.r/r<><00>s  z$GunicornTab.on_manage_service_resultcCs |<00><00>dSr0)rRr2r.r.r/r<<00>szGunicornTab.on_server_changedcCs\|<00><00>s dSd}|jr.t|jd<01>r.|jj<03><04>}|r@|<01>dd<03>}nd}d|<02><00>}|<00>d<05>dS)Nr<4E>rmr<>r<>rK)r<>r)r;r<>rjrurF)r(r<>rmr<>r.r.r/<00>check_service_status<75>s 
z GunicornTab.check_service_statusc
Cs<>|<00><00>s dSd}|jr.t|jd<02>r.|jj<03><04>}|r@|<01>dd<04>}nd}|<02>d<05><01>d<06>}|j<07>d|<03><00><02>|<00> <09>}|dkrzdS<00>z$|<02>d<05><01>d<08>}d |<03>d
|<05>d |<03>d |<03>d <0A> }|jj
<EFBFBD> |<06>\}}} |<07> |d<00>|<07> <0A>d|<03><00>}
|jj
<EFBFBD> |
<EFBFBD>\}}} |<07> |d<00>|<07> <0A>|<08><0E><00>d<10>} | <09><0E><00>d<10>} | <0B>r\|j<07>d<11>|j<07>| <0B>t<10>dt| <0B><01>d<13><03>n |j<07>d<14>| <0C>r<>d| <0C><13>k<07>r<>|j<07>d| <0C><00><02>t<10>d| <0C><00><02>WnNtk
<EFBFBD>r<>} z.|j<07>dt| <0A><01><00><02>t<10>dt| <0A><01><00><02>W5d} ~ XYnXdS)u查看Gunicorn访问日志Nr<4E>rk<00> /home/xiajir<69>z/logs/gunicorn_access.logu正在查看访问日志: <20>/logs<67> sudo test -f <20> || (sudo mkdir -p <20> && sudo touch <20> && sudo chmod 644 <20>)<29>
2025-08-29 21:33:35 +08:00
<EFBFBD>sudo tail -n 50 rru=== Gunicorn访问日志 ===u成功查看访问日志: <20> 字符u访问日志为空r<E7A9BA><00>错误信息: u查看访问日志出错: u查看访问日志失败: <20>r<>r)r;r<>rjrur<>r_r<>r3r<><00> exec_command<6E>write<74>flush<73>read<61>decoderr=r<>r<>r<>r<>r<>)r(r<>r<>Zaccess_log_pathr<68><00>log_dir<69> check_command<6E>stdin<69>stdout<75>stderr<72>command<6E>outputr<74>r<>r.r.r/rc<00>sH 
   zGunicornTab.view_access_logc
Cs<>|<00><00>s dSd}|jr.t|jd<02>r.|jj<03><04>}|r@|<01>dd<04>}nd}|<02>d<05><01>d<06>}|j<07>d|<03><00><02>|<00> <09>}|dkrzdS<00>z$|<02>d<05><01>d<08>}d |<03>d
|<05>d |<03>d |<03>d <0A> }|jj
<EFBFBD> |<06>\}}} |<07> |d<00>|<07> <0A>d|<03><00>}
|jj
<EFBFBD> |
<EFBFBD>\}}} |<07> |d<00>|<07> <0A>|<08><0E><00>d<10>} | <09><0E><00>d<10>} | <0B>r\|j<07>d<11>|j<07>| <0B>t<10>dt| <0B><01>d<13><03>n |j<07>d<14>| <0C>r<>d| <0C><13>k<07>r<>|j<07>d| <0C><00><02>t<10>d| <0C><00><02>WnNtk
2025-08-29 21:33:35 +08:00
<EFBFBD>r<>} z.|j<07>dt| <0A><01><00><02>t<10>dt| <0A><01><00><02>W5d} ~ XYnXdS)u查看Gunicorn错误日志Nr<4E>rkr<>r<>z/logs/gunicorn_error.logu正在查看错误日志: r<>r<>r<>r<>r<>r<>r<>r<>rru=== Gunicorn错误日志 ===u成功查看错误日志: r<>u错误日志为空r<E7A9BA>r<>u查看错误日志出错: u查看错误日志失败: r<>)r(r<>r<>Zerror_log_pathr<68>r<>r<>r<>r<>r<>r<>r<>r<>r<>r.r.r/rd8sH 
   zGunicornTab.view_error_log)N)r4r5r6rr:rRrwr<>r<>r3rTr<>r<>rVr<>rXr<>rFr<>r<r<>rcrdr7r.r.r,r/r8)s( w4#)

2025-08-29 21:33:35 +08:00
# '9r8)ry<00>logurur<00>PySide6.QtWidgetsrrrrrrr r
2025-08-28 22:30:17 +08:00
r r r rrr<00>PySide6.QtCorer<00>threadsrrrrrr8r.r.r.r/<00><module>s  @