目錄html
sudo apt-get update
python
sudo apt-get install python3.6
linux
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6
curl https://bootstrap.pypa.io/ez_setup.py -o - | python3.6 && python3.6 -m easy_install pip
pip install --upgrade pip
git
python --version && pip --version
檢驗版本github
pip install virtualenv
pip install virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
mkdir -p $WORKON_HOME
vim ~/.bashrc
,底部加入下面兩行後,source ~/.bashrc
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
lsvirtualenv
看是否安裝成功
find / -name virtualenvwrapper.sh
,結果替換/usr/local/bin/virtualenvwrapper.sh
再執行上述操做~/.bashrc
會在每次登錄當前用戶時自動執行,設置虛擬環境保存目錄WORKON_HOMEsql
所以,使用其餘用戶登錄則須要手動執行上述命令來設置環境變量。數據庫
virtualenvs 使用詳見:https://virtualenv.pypa.io/en/latest/apache
mkvirtualenv --python=python3.6 your_env_name
pip install django
sudo apt-get install apache2
:安裝apache2服務,注意觀察是否存在 perl: warning: Falling back to a fallback locale
異常,須要解決django
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "zh_CN.UTF-8", LC_TERMINAL_VERSION = "3.3.1", LC_TERMINAL = "iTerm2", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
vim ~/.bashrc
->最底部增長export LC_ALL=en_US.UTF-8
,en_US.UTF-8
需和報錯信息說明的一致。source ~/.bashrc
從新加載環境變量/.bashrc
會在每次登錄當前用戶時執行,可是其餘用戶不會執行該文件,即只能在當前用戶下正常使用 apache2。sudo apt-get install apache2-dev
:安裝 apache2 開發工具bootstrap
該環節也可採起從官網下載源碼編譯安裝的方式。
若使用 python3.5 可直接 sudo apt install libapache2-mod-wsgi-py3
,是以 python3.5編譯好的,不須要如下安裝步驟。
安裝步驟來自官方文檔:https://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html#apache-requirements
依賴項:
sudo apt-get install apache2-dev
:安裝 apache2 開發工具,若是是以源碼編譯安裝的 apache2,則可省略該步驟。apt-get 安裝的 apache2 不包含開發工具。sudo apt-get install python3.6-dev
:若使用其餘版本的python注意調整該命令正式安裝:
wget https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.5.24
:可訪問官方,根據須要下載目標版本,下載內容爲源碼壓縮包tar zxvf 4.5.24 && cd mod_wsgi-4.5.24
:解壓並進入--with-apxs
:編譯工具的地址,不設置則會自動在默認位置搜索。可先不設置嘗試編譯安裝,若出錯再根據平臺(unbuntu、debian)查找位置
find / -name '*apxs*' -print
:檢索當前目錄下是否含 apxs--with-python
:指示編譯對應的python版本,注意編譯使用的python版本必須和後面網站執行使用的版本徹底相同,最好在同一路徑!可參考下例
./configure --with-apxs=/usr/local/apache24/bin/apxs --with-python=/usr/local/python36/bin/python3.6
./configure --with-python=/home/XXX/.virtualenvs/env_name/bin/python3.6
make && make install
:權限不足請登陸 root 用戶或前加 sudo
sudo chmod 644 /usr/lib/apache2/modules/mod_wsgi.so
make clean
後google一下。mod_wsgi.so
至 apache2
sudo vim /atc/apache2/apache.conf
LoadModule wsgi_module 剛剛打印出的mod_wsgi.so絕對路徑
sudo service apache2 restart
or sudo service apache2 start
上傳項目至服務器
(可選) 重置項目:測試時產生的數據庫以及遷移記錄。慎重!
rm db.sqlite3
rm -rf */migrations/
遷移
python manage.py migrate
python manage.py makemigrations
(可選) 建立管理帳號
python manage.py createsuperuser
測試
settings.py
:DEBUG=True
workon your_env
python manage.py runserver ).0.0.0:8000
django 部署靜態文件
參考自:https://docs.djangoproject.com/zh-hans/3.0/howto/deployment/wsgi/modwsgi/
django設置:settings.py
STATIC_ROOT
:執行 python manage.py collectstatic
後,STATICFILES_FINDERS
找到的文件將被拷貝到該目錄下
STATIC_URL
:用戶以URL:ip:port/path?key=a&key=...
訪問時,處於path
開頭的 $STATIC_URL
部分將按照 apache_site.conf
進行替換獲得服務器上的絕對路徑。apache_site.conf
的配置在下一環節介紹。這種替換徹底是服務器框架的操做,和django無關。非 apache2 框架也有相似的設置方式。
STATICFILES_DIRS
:一個目錄列表,若是在STATICFILES_FINDERS
中設置 'django.contrib.staticfiles.finders.FileSystemFinder'
則被STATICFILES_FINDERS
找到。
STATICFILES_FINDERS
:按規則查找靜態文件
[ # STATICFILES_DIRS 'django.contrib.staticfiles.finders.FileSystemFinder', # $(APPs_path)/static 'django.contrib.staticfiles.finders.AppDirectoriesFinder', ]
詳見:https://docs.djangoproject.com/zh-hans/3.0/ref/settings/#std:setting-STATIC_ROOT
python manage.py collectstatic
STATICFILES_DIRS
查找到的文件,複製到 STATIC_ROOT
下# 配置文件保存在 /etc/apache2/sites-available/ # /etc/apache2/sites-available/ 下新建你的網站文件 your-site-name.conf # 在其中配置如下內容 # 指定 80 端口 <VirtualHost *:80> # 指定網站的地址(域名或者 IP 地址) # 該地址必須在 ALLOWED_HOSTS 列表中 ServerName your_ip_addr # ServerAlias www.example1.com www.example2.com # ServerAdmin 0.0.0.0 # Alias URL=schema://ip:port/path?中path的前綴 實際服務器地址 # 該命令可以要求 apache2 自動對用戶的訪問 URL:path 進行轉義 # 這裏保證和 django setting 中 一致, # 若 STATIC_URL='/static/' STATIC_ROOT='/var/static_root/',則以下 Alias /static/ /var/static_root/ # 同時設置目錄權限 <Directory /var/static_root> Require all granted </Directory> # 若是你還有其餘文件夾須要轉義,好比說存儲視頻的文件夾、或者存儲你自定義內容的靜態文件夾,均可以用這種方式來設置 # 指定 wsgi.py 腳本位置,ajango 項目中自動建立的 wsgi.py 是和 mod_wsgi 的掛載點 WSGIScriptAlias / /home/XXX/my_django_site/my_django_site/wsgi.py # "WSGIDaemonProcess" 是對守護進程的設置,具體參數參見 https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIDaemonProcess.html # 主要設置兩個參數: # python-path: 冒號分割的目錄,這裏的內容將被加入到python的檢索範圍內 # python-home:指明使用的python版本,須要指向包含 /bin/python 的目錄,虛擬環境或直裝python均適用 WSGIDaemonProcess your_ip_addr python-home=/home/my_usr_name/.virtualenvs/my_env_name python-path=/home/my_usr_name/.virtualenvs/my_env_name/lib/python3.6/site-packages:other_path_you_like WSGIProcessGroup your_ip_addr # 若是你對這裏的設置感到迷惑,很是推薦去閱讀一下上述連接,官方文檔說的很是詳細 # 還有其餘功能好比說設置進程數等強大功能。 <Directory /home/XXX/my_django_site/my_django_site> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>
Apache 默認運行網站的用戶是 www-data
,而咱們在上述設置中使用並非 www-data
因此須要修改項目文件、目錄的權限,使得 Apache 可以對所須要的文件進行 RWX。
ls -al
# 請在理解下列命令的基礎上修改、調整、執行 # 目錄必須有 x 權限才能進入,所以須要可讀可執行 # 通常文件須要可讀的權限 sudo chmod -R 644 my_project sudo find my_project -type d | xargs chmod 755 # 若存在上傳目錄,則須要可寫的權限 sudo chgrp www-data my_project/upload sudo chmod g+w my_project/upload # sqlite3 會生成一個db.sqlite3文件,因此須要修改這個文件的權限,加上寫的權限 sudo chgrp www-data my_project sudo chmod g+w my_project sudo chgrp www-data my_project/db.sqlite3 sudo chmod g+w my_project/db.sqlite3 # 設置的 python-path python-home 或許也須要權限,根據你的設置,可先不設置,後面根據報錯來調整
部署過程當中出現的問題80%都與權限有關,每一個平臺、每一個環境都有所不一樣,須要在理解權限的基礎上根據後面的調試環境自行修正。
vim django_site/django_site/settings.py
:DEBUG = False
vim /var/log/apache2
查看日誌
vim 快捷指令:
esc :e enter
shift+g
# 配置文件設置在 /etc/apache2/sites-available/ 目錄下,這裏只寫名字,可在任何目錄下執行 sudo a2ensite my_site.conf sudo service apache2 reload sudo service apache2 restart err: Invalid command 'WSGIScriptAlias', perhaps misspelled or defined by a module not included in the server configuration WSGIScriptAlias有問題的緣由一般是 mod-wsgi 安裝有問題 檢查 export LC_ALL=en_US.UTF-8 注意~/.bashrc 只針對當前用戶有效 err: [Thu Feb 13 15:17:10.020824 2020] [wsgi:error] [pid 25702:tid 140038272866048] [remote 1.194.132.43:44] from django.core.wsgi import get_wsgi_application [Thu Feb 13 15:17:10.020840 2020] [wsgi:error] [pid 25702:tid 140038272866048] [remote 1.194.132.43:44] ImportError: No module named 'django' 首先檢查 conf 文件中的python-path 是否配置正確,若是正確,則檢查其下的權限是否正確,即路徑目錄均rx,全部文件均r err: 因爲apache2 默認 掛載點是 '/' 所以在代碼中寫的相對路徑將以該點從新計算,可能形成錯誤。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:ONuB9t+zfCAiryLoQ7eYnVE2FnG4IoH/hP4MMYGgOMY. Please contact your system administrator. Add correct host key in /Users/XXX/.ssh/known_hosts to get rid of this message. Offending RSA key in /Users/XXX/.ssh/known_hosts:2 ECDSA host key for X.X.X.X has changed and you have requested strict checking. Host key verification failed.
緣由:目標主機的公鑰已經改變,爲了防護中間人攻擊,須要終止連接。具體動機可百度。
解決方案:
在服務器和本地端從新配置公私鑰
本地:sudo chmod 600 私鑰文件地址
Permissions 0644 for '/Users/XXX/.ssh/XXX.pem' are too open
ssh-keygen -R 目標訪問ip地址(這個操做會刪除.ssh/known_hosts
中記錄的近期公鑰
https://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html)
重啓服務器
本地端訪問服務器
sudo: unable to resolve host iZ2ze73nro8igc5iw6qmkgZ 緣由:http://code.sike.wang/code/show-5188.html 解決方案:在 etc/hosts 第一行 localhost 後添加這串亂碼,這是阿里雲建立給的默認主機名
本文由 ArrogantL 整理並在 CC BY-NC-SA 3.0 協議下發布。有任何問題請郵件聯繫 arrogant262@gmail.com
請各位遵循 Markdown: License 及其它參考文獻的共享協議來使用、修改和發佈。