1.安裝Centos
本案例適合內部網路,也就是不能接入網際網路的情況下或者網速非常慢的情況下,離線配置wed伺服器。這次主要記錄我在一次軍網環境下,無yum源,無pip源,配置和開發wed伺服器的過程。
1.1 本次配置所有模組的版本如下:Centos 7.8uwsgi 2.0.19.1Django 3.1.2 Python 3.6.5mysql 5.7nginx 1.18.0
1.2 建立檔案目錄,設計專案結構.├── app # 各個APP專案│ └── sduty├── mysql # 資料庫相關配置檔案├── nginx # nginx 配置相關檔案├── resource # 靜態資源目錄,用於存放圖片,影片,和網站的css,js檔案│ ├── image│ ├── static_app # 各APP的靜態檔案│ │ └── study│ └── video│ ├── software # 軟體包│ │ └── whl│ │ └── rpm└── uwsgi # uwsgi配置相關檔案 └── study
1.3 安裝rpm包與whl包
把整個www資料夾(下載地址)上傳至伺服器
1.3.1 安裝rpm包# 切換到rpm包所在的目錄cd /www/resource/software/rmp# 批次安裝(安裝當前目錄下所有rpm軟體包)rpm -Uvh --force --nodeps *rpm
1.3.2 安裝pip包# 切換到pip包所在的目錄cd /www/resource/software/whl# 批次安裝(安裝requirements.txt裡面記錄的所有pip包)pip3 install --no-index --ignore-installed --find-links=/www/resource/software/whl -r requirements.txt
2.配置防火牆
Centos防火牆預設所有埠都沒有開發,如果不把http常用的埠開啟,到時候外網無法訪問。這裡直接開啟3306(資料庫),80(http),8001(測試)
2.1 檢視防火牆是否開啟systemctl status firewalld
2.2 防火牆開啟埠訪問
firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含義: --zone #作用域 --add-port=80/tcp #新增埠,格式為:埠/通訊協議 --permanent #永久生效,沒有此引數重啟後失效
2.3 檢視所有開啟的埠firewall-cmd --list-ports
2.4 重啟防火牆注:開啟後需要重啟防火牆才生效
firewall-cmd --reload
2.5 防火牆關閉埠
firewall-cmd --remove-port=80/tcp --permanent
3.Mysql基本配置3.1 更換密碼
啟動msyql:
systemctl start mysqld.service
檢視MySQL執行狀態:
systemctl status mysqld.service
此時MySQL已經開始正常執行,不過要想進入MySQL還得先找出此時root使用者的臨時密碼,透過如下命令可以在日誌檔案中找出密碼:
grep "password" /var/log/mysqld.log
進入資料庫:
mysql -uroot -p
輸入初始密碼(也就是剛才查詢到的臨時密碼),此時不能做任何事情,因為MySQL預設必須修改密碼之後才能操作資料庫:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ranDeng@20200728';如密碼:ranDeng@20200728
其中‘new password’替換成你要設定的密碼,注意:密碼設定必須要大小寫字母數字和特殊符號,不然不能配置成功
此時可以順便建立資料庫,下面可以直接連線
# 建立資料庫CREATE DATABASE `study` CHARACTER SET 'utf8' COLLATE 'utf8_bin';
3.2 開啟mysql的遠端訪問
# 主要把password修改成剛才設定的新密碼grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
然後再輸入下面兩行命令
# 第一行口令flush privileges;# 第二行口令exit;
3.3 修改mysql的字元編碼
不修改會產生中文亂碼問題,修改/etc/my.cnf
vim /etc/my.cnf
內容如下
[mysqld]character_set_server=utf8init_connect='SET NAMES utf8'
重啟資料庫生效
systemctl restart mysqld
4.配置django
django是主後端框架,所以要配置的地方比較多,一步一步地來
4.1 生成專案目錄和app目錄django-admin startproject study
生成的study專案的預設結構為:
# 進入study目錄cd study/# 顯示結構樹tree|-- study| |-- __init__.py| |-- asgi.py| |-- settings.py| |-- urls.py| `-- wsgi.py`-- manage.py
4.2 配置settings檔案
# 匯入import os# 對所有ip段可見ALLOWED_HOSTS = ["*"]
##4.3 配置連線資料庫
在專案的配置模組的__init__.py檔案中匯入pymysql
# 匯入資料庫連線import pymysqlpymysql.version_info = (1, 4, 13, "final", 0)pymysql.install_as_MySQLdb()
在settings配置檔案中設定資料庫連線
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 資料庫連線引擎 'NAME': 'study', # 資料庫名稱 'USER': 'root', # 連線使用者名稱 'PASSWORD': 'ranDeng@20200728', 'HOST': 'localhost', # 資料庫連線地址 'PORT': '3306', # 埠,預設3306 'CONN_MAX_AGE': 60, # 持久連線時間 }}
4.4 配置靜態檔案
在專案根目錄建立資料夾
mkdir static
在static目錄中再新建目錄 global 用來存放全域性靜態檔案,和與子app同名的檔案,用來存放當前子app靜態檔案
在settings配置檔案中加入
# 靜態檔案路由的字首STATIC_URL = '/static/'# 存放查詢靜態檔案的目錄(注意study代表專案名稱,不同專案不同)STATIC_ROOT = os.path.join('/www/resource/static_app/study/', 'static_files')
到這裡基本的配置就完了,執行runserver就可以看到Django預設介面了
# 啟動測試模組python3 manage.py runserver 0.0.0.0:8001# 收集靜態檔案python3 manage.py collectstatic --noinput
5.配置uwsgi5.1 利用uwsgi配置檔案啟動django
新建檔案 uwsgi.ini
vim uwsgi.ini
配置檔案內容為:
# uwsig使用配置檔案啟動[uwsgi]# 直接做web伺服器使用http=0.0.0.0:8000# 專案目錄,相對於centos根目錄chdir=/www/app/study# 專案中wsgi.py檔案的目錄,相對於centos根目錄wsgi-file=/www/app/study/study/wsgi.py# 開啟的程序數量processes=4# 執行執行緒。由於GIL的存在,我覺得這個真心沒啥用。threads=2# 啟用主程序master=true# 程序個數workers=4# 指定pid檔案的位置,記錄主程序的pid號。pidfile=/www/uwsgi/study/uwsgi.pid# 設定日誌目錄daemonize=/www/uwsgi/study/uwsgi.log
uwsgi常用口令為:
# 啟動uwsgi --ini uwsgi.ini
5.2 設定uwsgi開機啟動
修改檔案
vim /etc/rc.local
開機啟動的指令碼
/usr/local/bin/uwsgi --ini /www/uwsgi/study/uwsgi.ini
修改/etc/rc.d/rc.local的可執行許可權。
chmod +x /etc/rc.d/rc.local
6.安裝nginx並且配置nginx
nginx 1.1.3之後已經預設支援mp4,flv模組,無須第三方模組支援。
6.1 編譯安裝# 切換到安裝包目錄cd /www/nginx/rpm# 解壓tar -zxvf nginx-1.18.0.tar.gz# 進入nginx-1.14.2安裝包目錄cd nginx-1.18.0# 配置./configure# 編譯(make)並且安裝(make install)make && make install
檢視nginx的安裝路徑
whereis nginx
預設安裝到:
cd /usr/local/nginx/sbin/
配置檔案預設在:
cd /usr/local/nginx/conf
6.2 nging 基本配置檔案
編輯檔案:
vim /usr/local/nginx/conf/nginx.conf
內容如下:
# 工作程序數worker_processes auto;# 錯誤日誌error_log /www/nginx/error.log;# 主程序號pid /www/nginx/nginx.pid;# 單個工作程序可以允許同時建立外部連線的數量events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #配置日誌格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" $http_host ' '$status $request_length $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time $upstream_response_time'; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http://127.0.0.1:8000; # 配置日誌資訊 access_log /www/nginx/study/access.log main; error_log /www/nginx/study/error.log error; } # 配置app靜態檔案資訊 location /static/ { alias /www/resource/static_app/study/static_files/; } # 配置全域性圖片檔案 location /image/ { alias /www/resource/image/; } # 配置全域性影片檔案 location /video/ { alias /www/resource/video/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}
檢查配置檔案是否正確
/usr/local/nginx/sbin/nginx -t
5.4 設定nginx開機啟動
centos 7以上是用Systemd進行系統初始化的,Systemd 是 Linux 系統中最新的初始化系統(init),它主要的設計目標是克服 sysvinit 固有的缺點,提高系統的啟動速度。開機沒有登陸情況下就能執行的程式,存在系統服務(system)裡。
在系統服務目錄裡建立nginx.service檔案
vim /lib/systemd/system/nginx.service
nginx.service內容如下:
[Unit]Description=nginxAfter=network.target [Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/usr/local/nginx/sbin/nginx -s quitPrivateTmp=true [Install]WantedBy=multi-user.target
設定開機啟動
systemctl enable nginx.service
nginx其他命令:
systemctl start nginx.service (啟動nginx服務)systemctl stop nginx.service (停止nginx服務)systemctl enable nginx.service (設定開機自啟動)systemctl disable nginx.service (停止開機自啟動)systemctl status nginx.service (檢視服務當前狀態)systemctl restart nginx.service (重新啟動服務)systemctl list-units --type=service (檢視所有已啟動的服務)