[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要怎搞呢
咱们下回分解~


<<:  Day22 跟着 spinlock 旋转吧

>>:  <Day22>用Shioaji API模拟帐户做台股下单

ESXi7.0 许可证

VMware vCenter 7.0 Standard104HH-D4343-07879-MV08K...

Day 14. Zabbix 环境规划

今天要跟大家分享两个不在安装范围内的客制设定,算是我们自己改良版跟大家分享。 第一个是如果照着官方安...

AE极光制作3-Day9

接续昨天的练习:https://ithelp.ithome.com.tw/articles/1026...

Day 30 : 结语

终於到了最後一篇了,就来讲讲这次发铁人赛文的感想吧! 过程分享 这次铁人赛其实有先囤了一些文章,可是...

第31天~上架

上架 一.打包APK 1.选Buile-Generate Signed Bundle/APK 2.选...