雲伺服器介紹、安裝環境所需依賴、上線前後端流程操作

今日內容概要

  • 購買伺服器和伺服器配置
  • 安裝mysql
  • 安裝redis(源碼安裝)
  • 安裝python3.8(源碼安裝)
  • 安裝uwsgi
  • 配置虛擬環境
  • 安裝nginx
  • 上線前端
  • 上線後端

內容詳細

1、購買伺服器和伺服器配置

# 阿里,華為,騰訊雲伺服器---》按量付費---》用多少花多少錢

# 保證阿里雲內要大於100塊餘額才能買,先用後付費

# 項目上線,需要一台伺服器---》買的雲伺服器---》centos7.9

# 登錄阿里雲 搜索ECS
	創建ecs---》按量付費---》選上海---》選2核4g---》裝系統---》centos 7.9---》選硬碟ssd 20g---》分配公網ip(外網,大家都可以訪問到)--》按使用量付費--》自定義密碼--》


# 遠程連接  ssh
	軟體:xshell連接  mac上沒有
	finalshell://www.hostbuf.com/t/988.html
	git---》右鍵打開bash,用它也可以連接

	本地cmd:ssh [email protected](公網IP)

# 全是linux命令
	ls :查看當前目錄下的文件和文件夾
	pwd:查看你所在路徑
	...
    
	root  許可權最高,linux所有配置都是文件,一切皆文件
    
	刪除文件:rm -rf /*     
	文件系統--》從 / 開始有很多文件夾   執行之後系統都進不了

  
# 遠程連接
	ssh root@ip地址   連接方式
	軟體自帶的連接
  
# 阿里雲機器
	python 2.7     自帶 ---》所有linux,mac都自帶2.x  --》系統服務 基於python寫的 指令:python
	python 3.6.8   自帶--》阿里雲帶的 指令:python3
	也自己再裝一個python 3.7 
  
  
# 執行一些命令
	yum update -y   # 更新全部軟體  yum 安裝軟體命令  update更新   -y:yes
    
    yum -y groupinstall "Development tools"  # 批量把開發用的軟體都裝上 git...
	
	yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel  -y  # 解決依賴  --》不裝的話 python可能裝不上

1.1 項目上線架構流程圖

image

2、安裝mysql

# 1 下載mysql57
	wget //dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm


# 2 安裝 mysql57
	yum -y install mysql57-community-release-el7-10.noarch.rpm
	yum install mysql-community-server --nogpgcheck -y


# 3 啟動mysql 並查看啟動狀態 
	systemctl start mysqld.service  # 啟動mysql服務
	systemctl status mysqld.service  # 查看服務

# 4 查看默認密碼並登錄
	grep "password" /var/log/mysqld.log
		qB).l-)aj2)g
	mysql -uroot -p 輸入密碼登錄

# 5 修改密碼
	ALTER USER 'root'@'localhost' IDENTIFIED BY 'Jgx12345?';


# 遠程連接鏈不上去,在伺服器本地連接可以了

3、安裝redis(源碼安裝)

# 下載redis-5.0.5
	wget //download.redis.io/releases/redis-5.0.5.tar.gz

# 解壓安裝包
	tar -xf redis-5.0.5.tar.gz

# 進入目標文件
	cd redis-5.0.5

# 編譯環境  src路徑下就有可執行文件---》redis-server,redis-cli等
	make 

# 複製環境到指定路徑完成安裝
	cp -r ~/redis-5.0.5 /usr/local/redis

# 配置redis可以後台啟動:修改下方內容
	vim /usr/local/redis/redis.conf

	daemonize yes

# 完成配置修改
	esc
	:wq

# 建立軟連接  redis-server和redis-cli 是在/usr/local/redis/src/這個路徑下,它不在環境變數中, 在任意路徑敲redis-cli ---》軟連接到/usr/bin/,這個路徑在環境變數---》以後在任意路徑敲 redis-server都有響應
	ln -s /usr/local/redis/src/redis-server /usr/bin/redis-server
    
	ln -s /usr/local/redis/src/redis-cli /usr/bin/redis-cli

# 後台運行redis
	cd /usr/local/redis
	redis-server ./redis.conf &

	ctrl + c
    
# 查看服務是否啟動
	ps aux |grep redis
    
# 測試redis環境
	redis-cli
	ctrl + c

# 關閉redis服務
	pkill -f redis -9

4、安裝python3.8(源碼安裝)

# 源碼編譯安裝---》源碼

# 前往用戶根目錄
	cd ~

# 下載 
# 伺服器終端
	wget //www.python.org/ftp/python/3.8.8/Python-3.8.8.tar.xz
        
	wget //registry.npmmirror.com/-/binary/python/3.8.6/Python-3.8.6.tgz  # 以3.8.6為例

# 解壓安裝包
	tar -xf Python-3.8.6.tgz

# 進入目標文件
	cd Python-3.8.6

# 配置安裝路徑:/usr/local/python3
# 把python3.8.8 編譯安裝到/usr/local/python38路徑下
	./configure --prefix=/usr/local/python38

# 編譯並安裝,如果報錯,說明缺依賴
	yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel zlib* libffi-devel  -y
    
	make && make install

# 建立軟連接:/usr/local/python38路徑不在環境變數,終端命令 python3,pip3
	ln -s /usr/local/python38/bin/python3 /usr/bin/python3.8
	ln -s /usr/local/python38/bin/pip3 /usr/bin/pip3.8
	
    python       2.x 
	python3      3.6
	python3.8    3.8

# 刪除安裝包與文件:
	cd ~
	rm -rf Python-3.8.6
	rm -rf Python-3.8.6.tar.xz

5、安裝uwsgi

# 測試階段使用wsgiref,性能低,上線使用uwsgi性能高,它用c寫的
# 安裝
	pip3.8 install uwsgi  # bin路徑下就會有uwsgi這個可執行文件,但是這個路徑不在環境變數,換到其他路徑找不到
    
	建立軟連接
	ln -s /usr/local/python38/bin/uwsgi /usr/bin/uwsgi
    
	在 ~目錄下:執行uwsgi 測試

6、配置虛擬環境

# 1 安裝依賴
	python3.8 -m pip install --upgrade pip
	python3.8 -m pip install --upgrade setuptools
	pip3.8 install pbr
	pip3.8 install virtualenv
	pip3.8 install -U virtualenvwrapper -i //pypi.douban.com/simple/ 
  
# 建立虛擬環境軟連接
	ln -s /usr/local/python38/bin/virtualenv /usr/bin/virtualenv

# 2 配置虛擬環境:填入下方內容
	vim ~/.bash_profile

	VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.8
source /usr/local/python38/bin/virtualenvwrapper.sh

# 3 退出編輯狀態
	esc

# 4 保存修改並退出
	:wq

# 5 更新配置文件內容
	source ~/.bash_profile

# 6 虛擬環境默認根目錄:~/.virtualenvs

# 7 創建虛擬環境
	mkvirtualenv -p python3.8 luffy

# 虛擬環境也要裝uwsgi
	workon luffy  # 正常進入虛擬環境
	pip3.8 install uwsgi
    
    
    
-----------------------------------------------------------------
    
### 如果安裝virtualenvwrapper失敗
	沒有workon這個快捷命令
	不使用虛擬環境了
	不使用workon快捷指令了
	//www.cnblogs.com/liuqingzheng/p/9508851.html
# 不使用virtualenvwrapper創建和使用虛擬環境
	用戶家路徑:mkdir virtual
	cd virtual
	ln -s /usr/local/python38/bin/virtualenv /usr/bin/virtualenv
virtualenv  luffy
# 進入到虛擬環境
	source /root/virtual/luffy/bin/activate
# 退出
	deactivate

7、安裝nginx

# 前往用戶根目錄
	[root@jgx ~]# cd ~

# 下載nginx1.13.7
	wget //nginx.org/download/nginx-1.13.7.tar.gz

# 解壓安裝包
	tar -xf nginx-1.13.7.tar.gz

# 進入目標文件
	cd nginx-1.13.7

# 配置安裝路徑:/usr/local/nginx
	[root@jgx nginx-1.13.7]# ./configure --prefix=/usr/local/nginx

# 編譯並安裝
	[root@jgx nginx-1.13.7]# make && sudo make install

# 建立軟連接:終端命令 nginx
	ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

# 刪除安裝包與文件:
	cd ~
	rm -rf nginx-1.13.7
	rm -rf nginx-1.13.7.tar.gz

# 測試Nginx環境,伺服器運行nginx,本地訪問伺服器ip
	nginx
	伺服器綁定的域名 或 ip:80
    
    
# 命令:
	1)啟動
		nginx

	2)關閉nginx
		nginx -s stop

	3)重啟nginx
		nginx -s reload

	4)查看埠,強行關閉
		ps -aux|grep nginx
		kill "pid:進程編號"
    
    
    
# 注意:跑在80埠上可以訪問,默認阿里雲把80埠的安全組開放了,如果跑在8080上,需要開安全組

8、上線前端

# 把vue項目編譯成純的 html css js

# 修改後端地址 luffycity項目下 src/js/assets/settings.js:
	base_url: "//139.224.254.58:8080/api/v1/"
  
# 在項目下執行cmd命令:
	npm run build    
	該命令會在項目路徑下建dist文件夾,下面放著純靜態文件(html,css,js)

# 把dist文件夾壓縮,傳到伺服器上去,使用ngixn代理
	在本地找到前端項目下該文件夾 生成壓縮包 拖拽到伺服器 ~目錄

# 從遠端想伺服器傳文件,需要在伺服器安裝軟體
	yum install -y lrzsz

# 服務端要解壓zip
	yum install -y unzip

	[root@jgx ~]# unzip dist.zip

# 移動到某個路徑
	[root@jgx ~]# mkdir /home/html
	[root@jgx ~]# mv ~/dist /home/html

# 修改nginx 的配置
	去向Nginx配置目錄,備份配置,完全更新配置:填入下方內容
	cd /usr/local/nginx/conf
	mv nginx.conf nginx.conf.bak
	vim nginx.conf
	i

events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen 80;
        server_name  127.0.0.1;
        charset utf-8;
        location / {
            root /home/html/dist;
            index index.html;
            try_files $uri $uri/ /index.html; # 解決單頁面應用刷新404問題
        }
    }
}   


# 退出並保存
	esc
	:wq

# 重啟nginx
	nginx -s reload
  
# 訪問://139.224.254.58

image

9、上線後端

9.1 上線前修改相關配置:

# 打開luffy_api後端項目
	將dev.py內容複製到 pro.py中

修改pro.py:

DEBUG = False

ALLOWED_HOSTS = ['*']



# 到公司上線階段
	# redis的配置
	CACHES = {
		"LOCATION": "redis://自行更改",
	}

修改user_settings.py:

# 後台基URL
# BASE_URL = '//127.0.0.1:8000'
BASE_URL = '//139.224.254.58:8000'

# 前台基URL
# LUFFY_URL = '//127.0.0.1:8080'
LUFFY_URL = '//139.224.254.58'

複製manage.py到項目根目錄下並改名manage_pro.py

# 修改一處:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.setting.pro')

9.2 導出項目環境

# Terminal窗口:
	pip freeze > requirements.txt

9.3 項目提交到遠程git倉庫

git add .
git commit -m 'v1版本發布了'
git pull origin master
git push origin master

"""
如遇報錯不能推送到遠方倉庫:
	清空遠程倉庫再重新推送
"""

9.4 服務端下載後端

# 創建存放後台項目的目錄
	mkdir /home/project

# 進入後台項目管理目錄同步git倉庫中的項目
	cd /home/project
	git clone //gitee.com/deity-jgx/luffy_api.git

9.5 虛擬環境安裝依賴

cd luffy_api
workon luffy

pip install -r requirements.txt  # 很有可能模組裝不上,相應的解決
"""
比如mysqlclient裝不上 就先進入requirements.txt 注釋掉改行 先安裝其他依賴
"""


# 解決 mysqlclient報錯:
	yum install mysql-devel -y
	yum install python-devel -y
	rpm --import //repo.mysql.com/RPM-GPG-KEY-mysql-2022
	pip install mysqlclient

9.6 uwsgi與nginx後台項目配置

# 編寫uwsgi的配置文件,讓uwsgi啟動django

# 創建luffyapi.xml
	(luffy) [root@jgx luffy_api]# vim luffyapi.xml

<uwsgi>    
   <socket>127.0.0.1:8888</socket>
   <chdir>/home/project/luffy_api/</chdir>    
   <module>luffy_api.wsgi</module>
   <processes>4</processes>
   <daemonize>uwsgi.log</daemonize>
</uwsgi>
# 也可以寫另一種格式 ini:
[uwsgi]
socket = 0.0.0.0:8888
chdir = /home/project/luffy_api/
wsgi-file = luffy_api/wsgi.py
module = luffy_api.wsgi
processes = 4
daemonize = uwsgi.log


# 配置nginx轉發
	cd /usr/local/nginx/conf
	vim nginx.conf
    
# 新增的server
    server {
        listen 8080;
        server_name  127.0.0.1;
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8888;
           uwsgi_param UWSGI_SCRIPT luffy_api.wsgi;
           uwsgi_param UWSGI_CHDIR /home/project/luffy_api/;
        }
    }
      
      
# 正常nginx 是轉發http請求,但是咱們現在uwsgi啟動是以socket啟動的,所以uwsgi只能接收uwsgi協議的請求,不能接收http請求,所以nginx中這樣配置,把本來http的請求通過nginx轉成uwsgi_params---》轉發給uwsgi
  
  
# 重啟nginx
	nginx -s reload

9.7 資料庫創建用戶

# 進入資料庫
	mysql -uroot -p
	Jgx12345?
    
# 創建資料庫
	create database luffy default charset=utf8;

# 設置許可權帳號密碼:帳號密碼要與項目中配置的一致
	grant all privileges on luffy.* to 'lqz'@'%' identified by 'Lqz12345?';

	grant all privileges on luffy.* to 'lqz'@'localhost' identified by 'Lqz12345?';
    
	flush privileges;

# 退出mysql
	quit;

9.8 項目的資料庫遷移

# 只有庫,沒有表,遷移數據
# 必須在luffy環境下
# 資料庫遷移
	cd /home/project/luffy_api/
	python manage_pro.py migrate


# 導入測試數據---》正式庫不這樣做
	把原來本地的數據,導入到正式庫中

9.9 啟動uwsgi,重啟nginx

#######虛擬環境也要裝uwsgi,正式環境也要裝
# 啟動uwsgi
	uwsgi -x ./luffyapi.xml


# 重啟nginx
	nginx -s reload
  
# redis要啟動
# 還要啟動celery的beat和work

image

9.10靜態樣式收集動靜分離

# 項目目錄下沒有 static 文件夾需要新建
	mkdir /home/project/luffy_api/luffy_api/static


# 配置文件修改
# 修改static配置,新增STATIC_ROOT、STATICFILES_DIRS
	cd /home/project/luffy_api/luffy_api/setting
	vim pro.py
    
STATIC_URL = '/static/'
STATIC_ROOT = '/home/project/luffy_api/luffy_api/static'  
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)

# 完成靜態文件遷移
	(luffy) [root@jgx luffy_api]# cd /home/project/luffy_api
	(luffy) [root@jgx luffy_api]# python /home/project/luffy_api/manage_pro.py collectstatic

# nginx 做動靜分離
# 新增的配置靜態文件
	vim /usr/local/nginx/conf/nginx.conf
    
location /static {
     alias /home/project/luffy_api/luffy_api/static;
 }
location /media {
     alias /home/project/luffy_api/luffy_api/media;
 }
"""
程式碼位置:
    server {
        listen 8080;
        server_name  127.0.0.1;
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8888;
           uwsgi_param UWSGI_SCRIPT luffy_api.wsgi;
           uwsgi_param UWSGI_CHDIR /home/project/luffy_api/;
        }
        location /static {
           alias /home/project/luffy_api/luffy_api/static;
        }
        location /media {
           alias /home/project/luffy_api/luffy_api/media;
        }
    }
"""

# 重啟nginx
	nginx -s reload