iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
自我挑戰組

BeautifulSoup網頁爬蟲佐Django伺服器框架附AWS雲端運算服務系列 第 26

[Day 26] 第二主餐 pt.4-賀喬遷aws二度,aws佈署完整步驟

好的,看到標題大家會覺得啊你怎又要喬遷了
沒錯,由於昨天加前天的嘗試

我把原本的aws搞爆了
不過俗話說的好,三折肱而成良醫
經過兩天研究後終於成功架起來啦
所以我們這篇就把前面所有的成見步驟全部拋棄
手把手帶大家重新成功建一個能跑的aws
廢話不多說,咱們累狗~

第一步 - 重新建立aws ec2

好的,首先第一步我們當然要先來建立EC2啦
一樣點選左上的新執行個體
然後就一路下一步到Configure Security Group這個地方
上次有一個失誤是我們沒有開8000的port給django用
所以我們這次把8000 port加進來

然後一樣一路下一步到確認環境之後
接下來他會要你選金鑰
這裡為了保險我們再重新申請一個

第二步 - 安裝pip3

下一步我們先下載pip3
這裡我們就不偷懶,手把手帶大家安裝
一樣先進去我們的aws實體
ssh -i "stonks_key2.pem" ubuntu@你的aws IP
先更新apt-get內所有套件,然後下載pip3

sudo apt-get update
sudo apt install python3-pip


OK,目前為止一切正常

第三步 - 安裝&設定MySQL

首先一樣執行安裝三步驟

sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev

接著啟動MySQL

sudo service mysql start

進去看MySQL老闆跟通關密語

sudo cat /etc/mysql/debian.cnf

用老闆的身分跟密碼登入

mysql -u debian-sys-maint -p

接著就是建立root user了
不過很遺憾的是,aws上的MySQL不能直接設root的密碼
那沒關係,山不轉路轉
我們就再創一個人,跟管理者說他是root的親弟弟請給他權限就好
所以我們創建root user步驟會變如下:

USE mysql;
CREATE USER 'django'@'localhost' IDENTIFIED BY 'AmaneKanata';
GRANT ALL ON *.* TO 'django'@'localhost';
FLUSH PRIVILEGES;

這樣就變成說
「您好這位叫做django,他是root的親弟弟,所以請給他跟root一樣的權限謝謝」
然後走之前也別忘了幫創一個stonks_db

CREATE DATABASE stonks_db;


打完收工,高歌離席

第四步 - 安裝&設定Django相關東東

為什麼這裡會講相關東東呢
因為這邊要處理的東西真的很多
首先光是django下載就會遇到很多問題
所以我們會依時序一個一個下載下來

首先先處理mySQL的my_config.h

sudo wget https://raw.githubusercontent.com/paulfitz/mysql-connector-c/master/include/my_config.h -O /usr/include/mysql/my_config.h

為啥要處理這個東東呢
因為aws沒有,但是MySQL-python要用上,就是這麼簡單

下一步就是之前提到的configparser問題
一樣先下載configparser

pip3 install configparser

然後把套件複製一套,格式改成MySQL-python可以吃的格式

sudo cp /usr/lib/python3.8/configparser.py /usr/lib/python3.8/ConfigParser.py

一樣由於aws是python3.8,所以路徑裡的python要改成3.8

餿發餿骨

接下來我們終於可以把那兩個傳說中的套件
django跟MySQL-python安裝上去啦
但我們還要額外裝mysqlclient==2.0.1
因為你在後面migrations,極有可能會發生下列問題

AttributeError: module 'MySQLdb.constants.FIELD_TYPE' has no attribute 'JSON' while migrating in Django

所以要把mysqlclient這個東東補上去

pip3 install django
pip3 install MySQL-python
pip3 install mysqlclient==2.0.1


水擱有力

第五步 - 佈署code

在佈署之前,我們有一些地方要先修改
首先還記得我們前面建立MySQL時用了django名稱而不是root對吧
所以這邊setting.py的DATABASES要改成如下

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'stonks_db',
        'USER': 'django',
        'PASSWORD': 'AmaneKanata',
        'HOST': '',
        'PORT': '',
    }
}

然後由於你的HOST IP要跟著aws
所以記得ALLOWED_HOSTS也要改成

ALLOWED_HOSTS = ["aws的IP"]

然後由於aws的MySQL CharField會有字數限制
所以我們的stonks_index內的models.py要把CharField修改成TextField

from django.db import models

# Create your models here.
class stonks_DB(models.Model):
    comp_id = models.IntegerField() #公司代號
    year = models.IntegerField() #財報年度
    season = models.IntegerField() #財報季度
    balance_sheet = models.TextField(max_length = 10000) #負債表
    income_statement = models.TextField(max_length = 10000) #損益表

最後還有一個地方要修改
我們進到stonks_index內的migrations資料夾
裡面應該有一個檔案叫做
0002_auto_XXXXXXXX_XXXX.py
我們開啟這個檔案
把裡面兩個CharField改成TextField
裡面的py檔應該會變成如下

# Generated by Django 3.2.7 on 2021-09-28 14:43

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('stonks_index', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='stonks_DB',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('comp_id', models.IntegerField()),
                ('year', models.IntegerField()),
                ('season', models.IntegerField()),
                ('balance_sheet', models.TextField(max_length=10000)),
                ('income_statement', models.TextField(max_length=10000)),
            ],
        ),
        migrations.DeleteModel(
            name='DBTest',
        ),
    ]

好的改完以後,commit

git add .
git commit -m "fix for aws environment"
git push


好的接下來回到aws
創立新資料夾,準備clone

設定使用者資訊

git config --global user.email "你的email"
git config --global user.name "你的github使用者名稱"

clone你的程式碼

https://github.com/konata39/itHome_stonks.git

準備剪綵 - runserver前的最後準備

python3 manage.py migrate

python3 manage.py runserver 0.0.0.0:8000,開跑~

好,沒有跳錯
在url欄輸入(aws IP):8000

好的,經過一番寒徹骨之後總算是讓我們django成功建立在aws上啦
明天我們也會順便把heroku的部分補完
到底heroku沒有console要怎搞呢
咱們下回分解~


上一篇
[Day 25] 中場休息 - 沒信用卡的學生福星,heroku
下一篇
[Day 27] 中場休息 - 換邊發球,heroku佈署完整步驟
系列文
BeautifulSoup網頁爬蟲佐Django伺服器框架附AWS雲端運算服務30

尚未有邦友留言

立即登入留言