Diango博客--11.Nginx + Gunicorn + Supervisor 方式部署

文章目錄

  • 0.部署前準備
  • 1.創建一個超級用戶
  • 2.更新 SQLite3
  • 3.安裝 Python3 、pip3.6以及 Pipenv
  • 4.部署代碼
  • 5.使用 Gunicorn
  • 6.啟動 Nginx 服務器
  • 7.配置 Nginx
  • 8.關閉 DEBUG 模式,收集靜態文件
  • 9.使用 Supervisor管理 Gunicorn 進程
  • 10.使用 CDN 加快 Bootstrap 和 jQuery 的加載速度

0.部署前準備

1)使用比較流行的 Nginx + Gunicorn 的方式將 django 開發的博客部署到自己的服務器,讓別人能夠通過域名訪問博客。

2)開發使用的本地環境為 Windows 10,服務器環境為 CentOS 7(64 位)

3)輔助工具 Xshell

1.創建一個超級用戶

adduser fxd
passwd fxd
usermod -aG wheel fxd
su - fxd

新用戶創建并切換成功了。如果是新服務器的話,最好先更新一下系統,避免因為版本太舊而給后面安裝軟件帶來麻煩。運行下面的兩條命令:

sudo yum update
sudo yum upgrade

2.更新 SQLite3

為了方便,我們博客使用了 SQLite3 數據庫,django 2.2 要求 SQLite3 數據庫版本在 3.8.3 以上,而 CentOS 7 系統自帶版本低于 django 2.2 所要求的最低版本,所以首先來更新 SQLite3 的版本。

注意:有可能你使用的服務器系統發行版 SQLite3 已經高于 3.8.3,這一步就可以跳過。請執行 sqlite3 --version 查看 SQLite3 的版本

首先登陸到 sqlite 的官方下載地址,查看最新發布的版本,本教程使用版本為 3.29.0,找到該版本的源碼壓縮包,復制其下載鏈接,然后通過 wget 命令下載到服務器(一般將源碼放在 ~/src 目錄下。)

mkdir -p ~/src
cd ~/src

下載 sqlite3 源碼并解壓安裝

wget https://sqlite.org/2019/sqlite-autoconf-3290000.tar.gz
tar zxvf sqlite-autoconf-3290000.tar.gz
cd sqlite-autoconf-3290000
./configure
make
sudo make install

注意:如果 wget 命令不存在,使用 sudo yum install -y wget 安裝即可。

報錯:./configure報錯
在這里插入圖片描述
解決方法:sudo yum install -y gcc glibc
之后執行 ./configure

查看sqlite3版本:
Xshell中重新打開一個終端:

sqlite3 --version

3.安裝 Python3 、pip3.6以及 Pipenv

CentOS 7 自帶的 Python 發行版為 2.7,因此需要安裝 Python3,為了兼容性,我們安裝 Python 3.6.4。
首先安裝可能的依賴:

sudo yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

然后下載 Python 3.6.4 的源碼并解壓:

cd ~/src
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
tar -zxvf Python-3.6.4.tgz

最后編譯安裝:

cd Python-3.6.4
./configure LD_RUN_PATH=/usr/local/lib LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include"
make LD_RUN_PATH=/usr/local/lib
sudo make install

注意這里安裝 Python 時,Python 會依賴 SQLite3 的庫,所以在 configure 時通過 LD_RUN_PATH 指定依賴的搜索目錄(因為我們之前更新了 SQLite3 的版本,指定依賴搜索目錄確保使用新的 SQLite3 依賴庫),另外兩個參數作用類似。

然后輸入 python3.6 -V 和 pip3.6 -V 命令測試安裝結果,輸出版本號說明安裝成功了。

有了 pip,就可以安裝 Pipenv 了:

首先建立軟連接:

sudo ln -s /usr/local/bin/pip3.6 /usr/bin/pip3.6
sudo ln -s /usr/local/bin/pip3 /usr/bin/pip3

然后安裝:

sudo pip3.6 install pipenv

注意:
python2.7和python3.6的區別
pip2.7和pip3.6的區別
以下部分列出兩種指令的輸出情況,供參考:

[fxd@instance-6lf3j8lp Python-3.6.4]$ python --version
Python 2.6.6
[fxd@instance-6lf3j8lp Python-3.6.4]$ python3.6 --version
Python 3.6.4[fxd@instance-6lf3j8lp Python-3.6.4]$ pip --version
pip 7.1.0 from /usr/lib/python2.6/site-packages (python 2.6)
[fxd@instance-6lf3j8lp Python-3.6.4]$ pip3.6 --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)[fxd@instance-6lf3j8lp Python-3.6.4]$ pip freeze
argparse==1.2.1
backports.ssl-match-hostname==3.4.0.2
boto==2.34.0
chardet==2.2.1
Cheetah==2.4.1
cloud-init==0.7.5
configobj==4.6.0
ethtool==0.6
iniparse==0.3.1
jsonpatch==1.2
jsonpointer==1.0
M2Crypto==0.20.2
Markdown==2.0.1
oauth==1.0.1
ordereddict==1.2
policycoreutils-default-encoding==0.1
prettytable==0.7.2
pycurl==7.19.0
Pygments==1.1.1
pygpgme==0.1
python-dmidecode==3.10.15
PyYAML==3.10
requests==2.6.0
setools==1.0
six==1.9.0
urlgrabber==3.9.1
urllib3==1.10.2
yum-metadata-parser==1.1.2[fxd@instance-6lf3j8lp Python-3.6.4]$ pip3.6 freeze
certifi==2019.11.28
pipenv==2018.11.26
virtualenv==16.7.8
virtualenv-clone==0.5.3

4.部署代碼

1)首先要對項目做一點配置,打開 settings.py,找到 ALLOWED_HOSTS,將其修改為:

ALLOWED_HOSTS = [‘127.0.0.1’, 'localhost ', ‘.zmrenwu.com’]

指定了 ALLOWED_HOSTS 的值后,django 將只允許通過指定的域名訪問我們的應用,比如這里只允許通過 127.0.0.1,localhost 以及 zmrenwu.com 和其任意子域名(域名前加一個點表示允許訪問該域名下的子域名)訪問(即 HTTP 報文頭部中 Host 的值必須是以上指定的域名,通常你在瀏覽器輸入域名訪問網站時,Host 的值就會被設置為網站的域名),這樣可以避免 HTTP Host 頭攻擊。

2)Django 項目中會有一些 CSS、JavaScript 等靜態文件,為了能夠方便地讓 Nginx 處理這些靜態文件的請求,我們把項目中的全部靜態文件收集到一個統一的目錄下,這個目錄通常位于 django 項目的根目錄,并且命名為 static。為了完成這些任務,需要在項目的配置文件里做一些必要的配置:
文件位置:blogproject/settings.py

# 其他配置...STATIC_URL = '/static/'
# 加入下面的配置
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATIC_ROOT 即指定靜態文件的收集路徑,這里指定為 BASE_DIR(項目根目錄,在 settings.py 文件起始處定義)下的 static 文件夾。

3)使用 git上傳代碼至服務器。首先安裝 git:

sudo yum install -y git

將代碼上傳到 GitHub 等代碼托管平臺,這樣我們就可以方便地把代碼拉取到服務器了。如何將pycharm中的項目上傳至github上,請戳這里。

通常將應用代碼放在 ~/apps/ 目錄下,先來設置一下服務器的文件結構,用于存放應用代碼等相關文件:

#在用戶目錄下創建 apps 目錄并進入
mkdir -p ~/apps
cd ~/apps
#拉取博客代碼
git clone https://github.com/fanxindong/HelloDjango-blog-tutorial-fxd.git

注意:上傳的項目代碼,需要將其中數據庫遷移時生成的代碼刪除,在服務器上重新遷移!

在這里插入圖片描述

然后進入到項目根目錄,安裝項目依賴:

cd ~/apps/HelloDjango-blog-tutorial
pipenv install --deploy --ignore-pipfile

然后創建一下數據庫:

pipenv run python manage.py makemigrations
pipenv run python manage.py migrate

此時查看目錄發現已經生成數據庫文件db.sqlite3

在這里插入圖片描述

4)啟動開發服務器:

pipenv run python manage.py runserver 0.0.0.0:8000
在這里插入圖片描述
在瀏覽器中輸入服務器域名和端口號,出現博客內容!
在這里插入圖片描述

5.使用 Gunicorn

首先進入到項目根目錄,安裝 Gunicorn:

pipenv install gunicorn

由于我們在服務端修改安裝了 gunicorn,代碼中 Pipfile 文件和 Pipfile.lock 文件會被更新,因此別忘了把改動同步到本地,具體做法可以自行學習,以下是一個參考:

#服務端提交代碼
git add Pipfile Pipfile.lock

若此時報錯,則按照要求輸出github的name和email
[root@instance-6lf3j8lp HelloDjango-blog-tutorial-fxd]# git config --global user.name “your-name”
[root@instance-6lf3j8lp HelloDjango-blog-tutorial-fxd]# git config --global user.email your-email

git commit -m “add gunicorn dependency”
git push

#本地電腦中拉取代碼
git pull

如此時出現錯誤,請戳這里

然后回到線上服務器,在項目根目錄,執行下面的命令啟動服務:

pipenv run gunicorn blogproject.wsgi -w 2 -k gthread -b 0.0.0.0:8000

打開瀏覽器顯示如下:

在這里插入圖片描述

各個參數的含義:

1)-w 2 表示啟動 2 個 worker 用于處理請求(一個 worker 可以理解為一個進程),通常將 worker 數目設置為 CPU 核心數的 2-4 倍。

2)-k gthread 指定每個 worker 處理請求的方式,根據大家的實踐,指定為 gthread 的異步模式能獲取比較高的性能,因此我們采用這種模式。

3)-b 0.0.0.0:8000,將服務綁定到 8000 端口,運行通過公網 ip 和 8000 端口訪問應用。

4)訪問 ip:8000(ip 為你服務器的公網 ip),應用成功訪問了,但是我們看到樣式完全亂了。別急,這不是 bug!此前我們使用 django 自帶的開發服務器,它會自動幫我們處理靜態樣式文件,但是 Gunicorn 并不會幫我們這么做。因為處理靜態文件并不是 Gunicorn 所擅長的事,應該將它交給更加專業的服務應用來做,比如 Nginx。

6.啟動 Nginx 服務器

Nginx是一個高性能的 HTTP 和反向代理 web 服務器,它的功能非常多,這里我們主要用它來處理靜態文件以及將非靜態文件的請求反向代理給 Gunicorn。當我們訪問一個博客文章詳情頁面時,服務器會接收到下面兩種請求:

  1. 顯示文章的詳情信息,這些信息通常保存在數據庫里,因此需要調用數據庫獲取數據。
  2. 圖片、css、js 等存在服務器某個文件夾下的靜態文件。

對于前一種請求,博客文章的數據需要借助 django 從數據庫中獲取,Nginx 處理不了,它就會把這個請求轉發給運行在 Gunicorn 服務中的 django 應用,讓 django 去處理。

用 django 去獲取靜態文件是很耗時的,但 Nginx 可以很高效地處理,因此對于后一種靜態文件的請求,只需要去這些靜態文件所在的文件夾獲取,Nginx 就會代為處理,不再麻煩 django。

首先安裝 Nginx:

sudo yum install epel-release -y
sudo yum install nginx -y

運行下面的命令啟動 Nginx 服務

service nginx start

小貼士:
service nginx start(啟動)
service nginx stop(停止)
service nginx reload(重啟)

在瀏覽器輸入 ip(不輸入端口則默認為 80 端口,Nginx 默認在 80 端口監聽請求),看到 Nginx 的歡迎界面說明 Nginx 啟動成功:

在這里插入圖片描述

7.配置 Nginx

Nginx 的配置位于 /etc/nginx/nginx.conf 文件中,其內容如下:

user nobody nobody;
...
http {# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;server {listen       80 default_server;listen       [::]:80 default_server;server_name  _;root         /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {}}
}

在 http 配置下有一個 server 模塊,server 模塊用于配置一個虛擬服務,使這個虛擬服務監聽指定的端口和域名。你可以配置多個 server,這樣就會啟動多個虛擬服務,用于監聽不同端口,或者是同一個端口,但是不同的域名,這樣你就可以在同一服務器部署多個 web 應用了。

再來看看 server 下的 include,include 會將指定路徑中配置文件包含進來,這樣便于配置的模塊化管理,例如我們可以把不同 web 應用的配置放到 /etc/nginx/conf.d/ 目錄下,這樣 nginx 會把這個目錄下所有以 .conf 結尾的文件內容包含到 nginx.conf 的配置中來,而無需把所有配置都堆到 nginx.conf 中,使得配置文件十分臃腫。

我們來配置博客應用,為了模塊化管理,我們將配置寫到 /etc/nginx/conf.d/ 目錄下。先在服務器的 conf.d 目錄下新建一個配置文件,把它叫做 HelloDjango-blog-tutorial-fxd.conf。寫入下面的配置內容:
文件位置:/etc/nginx/conf.d/HelloDjango-blog-tutorial-fxd.conf

server {charset utf-8;listen 80;server_name www.fanxindong.com;location /static {alias /home/fxd/apps/HelloDjango-blog-tutorial-fxd/static;}location / {proxy_set_header Host $host;proxy_pass http://127.0.0.1:8000;}
}

首先我們配置了一個虛擬服務,編碼方式為 utf-8,監聽于 80 端口。

服務的域名為 www.fanxindong.com,所以來自這個域名的請求都會被這個服務所處理。

所有URL 匹配 /static 的請求均由 Nginx 處理,alias 指明了靜態文件的存放目錄,這樣 Nginx 就可以在這個目錄下找到請求的文件返回給客戶端。

其它請求轉發給運行在本機 8000 端口的應用程序處理,我們會在這個端口啟動 Gunicorn 用于處理 Nginx 轉發過來的請求。

重啟 nginx 使得配置生效:

service nginx reload

8.關閉 DEBUG 模式,收集靜態文件

開發環境下,django 為了調試方便,會將 settings.py 文件中的 DEBUG 選項配置為 True,這樣如果程序運行出錯,調試信息將一覽無余,這在開發時很方便,但部署到線上就會帶來巨大安全隱患,所以我們把 DEBUG 選項設置為 False,關閉調試模式,在本地將 settings.py 中的 DEBUG 為:

DEBUG=False

線上服務器更新最新的代碼,然后運行命令收集靜態文件到之前配置的 STATIC_ROOT 目錄下:

pipenv run python manage.py collectstatic

然后使用 Gunicorn 啟動服務。

pipenv run gunicorn blogproject.wsgi -w 2 -k gthread -b 0.0.0.0:8000

9.使用 Supervisor管理 Gunicorn 進程

現在 Gunicorn 是我們手工啟動的,一旦我們退出 shell,服務器就關閉了,博客無法訪問。就算在后臺啟動 Gunicorn,萬一哪天服務器崩潰重啟了又得重新登錄服務器去啟動,非常麻煩。為此使用 Supervisor 來管理 Gunicorn 進程,這樣當服務器重新啟動或者 Gunicorn 進程意外崩潰后,Supervisor 會幫我們自動重啟 Gunicorn。

先按 Ctrl + C 停止剛才啟動的 Gunicorn 服務進程。

首先安裝 Supervisor。

sudo pip3 install supervisor

設置如下的目錄結構(位于 ~/etc 目錄下)來管理 Supervisor 有關的文件:

~/etc
├── supervisor
│ ├── conf.d
│ └── var
│ ├── log
└── supervisord.conf

其中 supervisord.conf 是 Supervior 的配置文件,它會包含 conf.d 下的配置。var 目錄下用于存放一些經常變動的文件,例如 socket 文件,pid 文件,log 下則存放日志文件。

指令:
mkdir -p ~/etc/supervisor/conf.d
mkdir -p ~/etc/supervisor/var/log

然后進入 ~/etc 目錄下生成 Supervisor 的配置文件:

cd ~/etc
echo_supervisord_conf > supervisord.conf


  1. 修改 supervisor.conf,讓 Supervisor 進程產生的一些文件生成到上面我們創建的目錄下,而不是其默認指定的地方。

首先找到 [unix_http_server] 版塊,將 file 設置改為如下的值:

[unix_http_server]
file=/home/fxd/etc/supervisor/var/supervisor.sock

即讓 socket 文件生成在 ~/etc/supervisor/var/ 目錄下。注意 supervisor 不支持將 ~ 展開為用戶 home 目錄,所以要用絕對路徑指定

  1. 類似的修改 [supervisord] 板塊下的 logfile 和 pidfile 文件的路徑,還有 user 改為系統用戶,這樣 supervisor 啟動的進程將以系統用戶運行,避免可能的權限問題:

logfile=/home/fxd/etc/supervisor/var/log/supervisord.log
pidfile=/home/fxd/etc/supervisor/var/supervisord.pid
user=fxd

  1. 還有 [supervisorctl] 板塊下:

serverurl=unix:///home/fxd/etc/supervisor/var/supervisor.sock

  1. [include] 版塊,將 /home/yangxg/etc/supervisor/conf.d/ 目錄下所有以 .ini 結尾的文件內容包含到配置中來,這樣便于配置的模塊化管理,和之前 Nginx 配置文件的處理方式是類似的。

files = /home/fxd/etc/supervisor/conf.d/*.ini

  1. 然后我們到 conf.d 文件夾下,新建我們博客應用的配置hellodjango-blog-tutorial-fxd.ini:

[program:hellodjango-blog-tutorial]
command=pipenv run gunicorn blogproject.wsgi -w 2 -k gthread -b 127.0.0.1:8000
directory=/home/fxd/apps/HelloDjango-blog-tutorial-fxd
autostart=true
autorestart=unexpected
user=fxd
stdout_logfile=/home/fxd/etc/supervisor/var/log/Hellodjango-blog-tutorial-fxd-stdout.log
stderr_logfile=/home/fxd/etc/supervisor/var/log/Hellodjango-blog-tutorial-fxd-stderr.log

各項配置的含義:

[program:hellodjango-blog-tutorial] 指明運行應用的進程,名為 hellodjango-blog-tutorial。
command 為進程啟動時執行的命令。
directory 指定執行命令時所在的目錄。
autostart 隨 Supervisor 啟動自動啟動進程。
autorestart 進程意外退出時重啟。
user 進程運行的用戶,防止權限問題。
stdout_logfile,stderr_logfile 日志輸出文件。

  1. 啟動 Supervisor

supervisord -c ~/etc/supervisord.conf

-c 指定 Supervisr 啟動時的配置文件。

進入 supervisorctl 進程管理控制臺:

supervisorctl -c ~/etc/supervisord.conf

執行 update 命令更新配置文件并啟動應用。

瀏覽器輸入域名,可以看到服務已經正常啟動了。

10.使用 CDN 加快 Bootstrap 和 jQuery 的加載速度

我們的項目使用了 Bootstrap 和 jQuery,這兩個文件我們是從本地加載的。如果服務器性能比較差的話,加載需要耗費很長的時間,網站打開的速度就變得無法忍受。我們使用 CDN 來加快加載速度。具體來說,替換 base.html 的幾個靜態文件的加載標簽:

文件位置:base.html

- <link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}">
- <script src="{% static 'blog/js/jquery-2.1.3.min.js' %}"></script>
- <script src="{% static 'blog/js/bootstrap.min.js' %}"></script>
+ <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
+ <script src="https://cdn.bootcss.com/jquery/2.1.3/jquery.min.js"></script>
+ <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

本地修改代碼后,將代碼同步到線上服務器,執行下面的命令重啟 hellodjango-blog-tutorial 應用進程:

supervisorctl -c ~/etc/supervisord.conf restart hellodjango-blog-tutorial

這樣網站訪問的速度將大大提升!

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

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

相關文章

計算機更改了用戶名數據恢復,怎么把電腦更換用戶后恢復到原來的用戶呢?

如何讓administrator帳戶出現在登陸畫面&#xff1f;安裝Windows XP時&#xff0c;如果設置了一個管理員賬戶&#xff0c;那么系統內置沒有密碼保護的Administrator管理員賬戶是不會出現在用戶登錄列表中的。雖然它身在幕后&#xff0c;可卻擁有系統最高權限&#xff0c;為了方…

StringBuilder類

1.1 StringBuilder類概述StringBuilder:是一個可變的字符串。字符串緩沖區類。 String和StringBuilder的區別&#xff1a;String的內容是固定的StringBuilder的內容是可變的1.1.1 拼接字符串耗費內存原因:每次拼接都會產生新的字符串對象,而利用StringBuilder來拼接字符串自始至…

如何使用搜索技巧來成為一名高效的程序員

沒有人是完全獨立的孤島&#xff0c;每個人都是整體的一部分。—— 約翰多恩對于缺乏編程知識的人來說&#xff0c;完全有可能編寫一個網頁或小程序。如果在用Google搜索相關示例時幸運的話&#xff0c;可以搜到現成的代碼。即使是經驗豐富的程序員&#xff0c;通常也會為了節省…

電開大計算機應用基礎作業,2016年電大-電大計算機應用基礎作業 答案.doc

2016年電大-電大計算機應用基礎作業 答案計算機作業2單項選擇題&#xff1a;第1題:在Word中編輯文本時&#xff0c;編輯區顯示的“水印”在打印時( )出現在紙上。(2分)A、不會B、全部C、一部分D、大部分第2題:Word文檔以文件形式存放于磁盤中&#xff0c;其默認的文件擴展名為(…

軟件測試的步驟

大型軟件系統的測試過程基本上由模塊測試、子系統測試、系統測試、驗收測試和平行運行等五個步驟組成。 1.模塊測試 在設計得好的軟件系統中&#xff0c;每個模塊完成一個清晰定義的子功能&#xff0c;而且這個子功能和同級其他模塊的功能之間沒有相互依賴關系。因此&#xff…

linux系統優化思路

文章目錄一. 影響linux性能的因素1.系統硬件資源2.操作系統相關資源3.應用程序軟件資源二. 分析系統性能涉及的人員1.Linux運維人員2.系統架構設計人員3.軟件開發人員三. 系統性能分析工具四.思路總結一. 影響linux性能的因素 1.系統硬件資源 1&#xff09;cpu 2&#xff09;…

遞歸鎖

from threading import Thread,RLock import timemutexAmutexBRLock()#一個線程拿到鎖&#xff0c;counter加1,該線程內又碰到加鎖的情況&#xff0c;則counter繼續加1&#xff0c; #這期間所有其他線程都只能等待&#xff0c;等待該線程釋放所有鎖&#xff0c;即counter遞減到…

UI體系的本質是結構化存在

UI體系的本質是結構化存在&#xff1b; UI系統的問題需要使用結構化的思維來處理。

什么是視圖

視圖是存儲在數據庫中的查詢的SQL 語句&#xff0c;它主要出于兩種原因&#xff1a;安全原因&#xff0c; 視圖可以隱藏一些數據&#xff0c;如&#xff1a;社會保險基金表&#xff0c;可以用視圖只顯示姓名&#xff0c;地址&#xff0c;而不顯示社會保險號和工資數等&#xff…

30分鐘,讓你成為一個更好的程序員

我相信激勵是非常重要的。這也是為什么我常常把時間管理&#xff08;這些書激勵我不管改進我的時間管理方法&#xff09;的書和軟件開發拿出來看看。我最近剛看完一本 書&#xff0c;“Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman”。這本書推動我…

如何啟用計算機的遠程服務,遠程桌面服務,教您怎么打開遠程桌面服務

遠程桌面可以通過控制另一臺電腦的功能&#xff0c;讓網絡管理員可以在家中安全的控制單位的服務器&#xff0c;而且這個功能是系統內置的&#xff0c;所以比使用其他第三方的遠程控制工具更方便。那么我的重點來了&#xff0c;我今天就教你們怎么打開桌面遠程服務&#xff0c;…

pipenv相關指令

pip install pipenv 安裝pipenv pipenv install 創建虛擬環境 &#xff08;項目根目錄下&#xff09; pipenv shell     進入虛擬環境&#xff08;如果不存在&#xff0c;則創建并進入虛擬環境&#xff09; pipenv install flask   安裝模塊 pipenv uninstall flask 卸…

簡易多線程爬蟲框架

本文首發于知乎 本文使用多線程實現一個簡易爬蟲框架&#xff0c;讓我們只需要關注網頁的解析&#xff0c;不用自己設置多線程、隊列等事情。調用形式類似scrapy&#xff0c;而諸多功能還不完善&#xff0c;因此稱為簡易爬蟲框架。 這個框架實現了Spider類&#xff0c;讓我們只…

【小松教你手游開發】【unity實用技能】給每個GameObject的打開關閉加上一個漸變...

在游戲開發中&#xff0c;經常會因為直接將GameObject&#xff0c;setActive的方式打開關閉&#xff0c;這種方式效果太過生硬而給它加上一個Tween 可能是AlphaTween或者ScaleTween。 再加上一個PlayTween來做控制。 這樣子需要在每個GameObject上加上這幾個Component不說&…

靜態網頁和動態網頁

靜態網頁是指不應用程序而直接或間接制作成html的網頁&#xff0c;這種網頁的內容是固定的&#xff0c;修改和更新都必須要通過專用的網頁制作工具&#xff0c;比如Dreamweaver。動態網頁是指使用網頁腳本語言&#xff0c;比如php、asp、asp.net等&#xff0c;通過腳本將網站內…

在微型計算機中 如果電源突然中斷,微型計算機在工作中電源突然中斷,則其中的信息全部丟失,再次通電后也不能恢復的..._考試資料網...

請根據下面的文字材料&#xff0c;完成一節課的教學設計。 絲綢之路 一座古樸典雅的“絲綢之路”巨型石雕&#xff0c;矗立在西安市玉祥門外。那馱著彩綢的一峰峰駱駝&#xff0c;高鼻凹眼的西域商人&#xff0c;精神飽滿&#xff0c;栩栩如生。商人們在這個東方大都市開了眼界…

Vmware上安裝RedHat Linux 7.3操作系統手冊

文章目錄1&#xff0e;點擊“創建新的虛擬機”&#xff0c;勾選“自定義”選項&#xff0c;點擊一步&#xff1b;2&#xff0e;默認選擇最高版本的workstations&#xff0c;點擊下一步&#xff1b;3&#xff0e;選擇“稍后安裝操作系統”&#xff0c;點擊下一步&#xff1b;4&a…

軟件開發的“三重門”

自從上次寫了“程序員技術練級攻略” 以來&#xff0c;就覺得似乎還有很多東西沒有談到&#xff0c;但當時沒有繼續思考了。而春節前有人問我&#xff0c;是做底層技術&#xff0c;還是做業務。這問題讓我思考了很多&#xff0c;不由自主地回顧了一 下我這十多年的軟件開發經歷…

軟件工程15 個人閱讀作業1

Task1&#xff1a;注冊個人博客賬號 個人博客地址 https://www.cnblogs.com/bmr666/ Task2&#xff1a;注冊碼云賬號 碼云賬號 https://gitee.com/bmr666 Task3&#xff1a;完成博客-閱讀與思考 閱讀參考材料&#xff0c;并回答下面幾個問題&#xff1a; &#xff08;1&#xf…

Windows Server 2008操作系統安裝手冊

文章目錄1&#xff0e;輸入語言和其他首選項&#xff0c;然后單擊“下一步”繼續&#xff1b;2&#xff0e;點擊“現在安裝”&#xff0c;啟動安裝程序&#xff1b;3&#xff0e;選擇要安裝的操作系統&#xff0c;這里選擇Windows Server 2008 R2 Enterprise&#xff08;完全安…