一、下載項目html
git clone https://github.com/wangyitao/MyBlogs.gitpython
二、進入Myblogs目錄mysql
cd MyBlogslinux
三、建立虛擬環境而且安裝依賴nginx
pipenv installgit
四、搭建mysql環境,以及建立數據庫和用戶github
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm # 下載rpm源 rpm -ivh mysql80-community-release-el7-1.noarch.rpm # 添加rpm源到系統 yum update # 更新源,替換掉原來的源 yum install mysql-server # 安裝mysql service mysqld start # 啓動mysql service mysqld status # 查看mysql是否啓動 grep 'temporary password' /var/log/mysqld.log # 查找mysql給咱們設置的初始密碼 mysql -uroot -p # 登陸mysql,密碼輸入上面查到的初始密碼 ALTER USER 'root'@'localhost' IDENTIFIED BY '密碼';(注意要切換到mysql數據庫,使用use mysql)修改root密碼 flush privileges; # 直接生效修改以後的密碼,不用重啓mysql CREATE DATABASE myblogs DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci; # 建立一張給網站用的表,表名自定,個人叫myblogs CREATE USER '用戶名'@'localhost' IDENTIFIED BY '密碼!'; # 建立新用戶來管理這個網站 GRANT ALL PRIVILEGES ON myblogs.* TO '用戶名'@'localhost'; # 給用戶建立操做表的權限 FLUSH PRIVILEGES; # 刷新
五、修改代碼,符合本身的需求web
修改settings/production.py文件redis
from .base import * # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = os.environ['SECRET_KEY'] # 從環境變量中讀取,增長安全性 # SECURITY WARNING: don't run with debug turned on in production!2. DEBUG = False ALLOWED_HOSTS = ['*'] # Database # https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASE_PASSSWORD = os.environ['DATABASE_PASSSWORD'] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myblogs', # 要鏈接的數據庫,鏈接前須要建立好 'USER': 'root', # 鏈接數據庫的用戶名 'PASSWORD': DATABASE_PASSSWORD, # 鏈接數據庫的密碼 'HOST': '127.0.0.1', # 鏈接主機,默認本級 'PORT': 3306 # 端口 默認3306 } } ADMINS = [ # 配置管理員,出錯發送給管理員 ('felix', 'felix@example.com'), ] # 郵件相關配置,用來發郵件 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.qq.com' EMAIL_PORT = 465 EMAIL_HOST_USER = '1403179190@qq.com' # 這裏部署的時候改爲本身的qq郵箱 EMAIL_HOST_PASSWORD = os.environ['EMAIL_HOST_PASSWORD'] # 受權碼 EMAIL_SUBJECT_PREFIX = u'[FCBlog]' EMAIL_USE_SSL = True # 與SMTP服務器通訊時,是否啓動TLS連接(安全連接) EMAIL_TIMEOUT = 60 FROM_EMAIL = 'FCBlog<1403179190@qq.com>' # 日誌配置 LOGGING_FILE_PATH = os.environ['LOGGING_FILE_PATH'] # 配置日誌文件位置 # 日誌文件 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': LOGGING_FILE_PATH, }, 'mail_admins': { # 出錯發送郵件給管理員 'level': 'ERROR', 'class': 'django.utils.log.AdminEmailHandler', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, 'django.request': { 'handlers': ['mail_admins'], 'level': 'ERROR', 'propagate': False, }, }, } # 配置django的session引擎改爲redis SESSION_ENGINE = 'redis_sessions.session' # redis服務器地址 SESSION_REDIS_HOST = 'localhost' # redis端口 SESSION_REDIS_PORT = 6379 # 選擇那個redis庫 SESSION_REDIS_DB = 2 # 密碼 SESSION_REDIS_PASSWORD = '' # 前綴的鍵名 SESSION_REDIS_PREFIX = 'myblogs_django_session'
修改production.py中的郵箱配置,數據庫配置等。sql
六、將production.py中須要從環境變量讀取的數據寫入環境變量,在/etc/profile下添加以下信息。
# django關鍵信息變量 export SECRET_KEY="" # 寫入本身的django的secret_key export DATABASE_PASSSWORD="" # 寫入本身的數據庫密碼 export EMAIL_HOST_PASSWORD="" # 寫入本身的qq郵箱的key export LOGGING_FILE_PATH="" # 寫入本身的日誌存放目錄絕對路徑 好比個人/home/myblogs_log/mylog.log
a、django的SECRET_KEY從新生成方式以下:
(MyBlogs) [root@localhost MyBlogs]# django-admin shell Python 3.7.2 (default, Jan 3 2019, 16:25:55) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from django.core.management import utils >>> utils.get_random_secret_key() 'yqk27s&bi(11te&8dgl=-r1&638re&)3bj=ozzb1h+72p-ra53' >>>
b、EMAIL_HOST_PASSWORD 能夠從qq郵箱官網獲取
七、配置好以後生成表結構
python manage.py makemigrations
python manage.py migrate
八、生成緩存表,而且收集靜態資源
python3 manage.py createcachetable # 生成緩存表
python3 manage.py collectstatic # 收集靜態資源
九、給mysql配置時區信息,默認爲空
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p "密碼" mysql
十、第一階段測試
[root@localhost MyBlogs]# pipenv run python3 FCBlogs/manage.py runserver 0.0.0.0:80 Performing system checks... System check identified no issues (0 silenced). January 04, 2019 - 22:30:52 Django version 2.1.4, using settings 'myblog.settings.development' Starting development server at http://0.0.0.0:80/ Quit the server with CONTROL-C.
而後使用ip訪問若是成功就表示第一階段配置完成。
十一、安裝uwsgi
pip3 install uwsgi
十二、配置uwsgi啓動文件
新建一個uwsgi.ini文件,內容以下
[uwsgi] chdir=/root/myblogs/MyBlogs/FCBlogs home=/root/.local/share/virtualenvs/MyBlogs-7hihB8Gz/ module=myblog.wsgi master=true processes=4 socket=0.0.0.0:8001 vacuum=true max-requests=5000 enable-threads=true harakiri=20 uid=1000 pid=2000 daemonize=/root/myblogs/MyBlogs/myblogs_uwsgi/myblogs.log pidfile=/root/myblogs/MyBlogs/myblogs_uwsgi/master.pid
uwsgi參數詳解
master = true #啓動主進程,來管理其餘進程,其它的uwsgi進程都是這個master進程的子進程,若是kill這個master進程,至關於重啓全部的uwsgi進程。 chdir = /web/www/mysite #在app加載前切換到當前目錄, 指定運行目錄 module = mysite.wsgi # 加載一個WSGI模塊,這裏加載mysite/wsgi.py這個模塊 py-autoreload=1 #監控python模塊mtime來觸發重載 (只在開發時使用) lazy-apps=true #在每一個worker而不是master中加載應用 socket = /test/myapp.sock #指定socket文件,也能夠指定爲127.0.0.1:9000,這樣就會監聽到網絡套接字 processes = 2 #啓動2個工做進程,生成指定數目的worker/進程 buffer-size = 32768 #設置用於uwsgi包解析的內部緩存區大小爲64k。默認是4k。 daemonize = /var/log/myapp_uwsgi.log # 使進程在後臺運行,並將日誌打到指定的日誌文件或者udp服務器 log-maxsize = 5000000 #設置最大日誌文件大小 disable-logging = true #禁用請求日誌記錄 vacuum = true #當服務器退出的時候自動刪除unix socket文件和pid文件。 listen = 120 #設置socket的監聽隊列大小(默認:100) pidfile = /var/run/uwsgi.pid #指定pid文件 enable-threads = true #容許用內嵌的語言啓動線程。這將容許你在app程序中產生一個子線程 reload-mercy = 8 #設置在平滑的重啓(直到接收到的請求處理完才重啓)一個工做子進程中,等待這個工做結束的最長秒數。這個配置會使在平滑地重啓工做子進程中,若是工做進程結束時間超過了8秒就會被強行結束(忽略以前已經接收到的請求而直接結束) max-requests = 5000 #爲每一個工做進程設置請求數的上限。當一個工做進程處理的請求數達到這個值,那麼該工做進程就會被回收重用(重啓)。你可使用這個選項來默默地對抗內存泄漏 limit-as = 256 #經過使用POSIX/UNIX的setrlimit()函數來限制每一個uWSGI進程的虛擬內存使用數。這個配置會限制uWSGI的進程佔用虛擬內存不超過256M。若是虛擬內存已經達到256M,並繼續申請虛擬內存則會使程序報內存錯誤,本次的http請求將返回500錯誤。 harakiri = 60 #一個請求花費的時間超過了這個harakiri超時時間,那麼這個請求都會被丟棄,而且當前處理這個請求的工做進程會被回收再利用(即重啓)
1三、配置nginx參數
配置文件以下,nginx.conf
user root; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; # 支持圖片 gif等等壓縮,減小網絡帶寬 gzip on; server { listen 80; server_name myblog; # substitute your machine's IP address or FQDN charset utf-8; client_max_body_size 75M; # adjust to taste location /favicon.ico { alias /root/myblogs/MyBlogs/myicon.ico; } location /media { alias /root/myblogs/MyBlogs/FCBlogs/media; # your Django project's media files - amend as required } location /static { alias /root/myblogs/MyBlogs/FCBlogs/static_collection; # your Django project's static files - amend as required } location / { uwsgi_pass 0.0.0.0:8001; include uwsgi_params; # the uwsgi_params file you installed } } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
1四、啓動redis
redis-server
1五、啓動uwsgi
uwsgi -i uwsgi.ini
當uwsgi啓動時若是想要中止能夠執行下面代碼
uwsgi --stop master.pid # master.pid 爲 uwsgi.ini文件中pidfile指定的文件
1六、nginx的啓動
啓動:nginx
若是中止,能夠pkill nginx,而後再啓動nginx
1七、這下就完成了。其餘的能夠參考個人另外一篇文章