# ワークショップ実施手順 ###### tags: `SAiTech` **本資料は,主にAWS EC2を利用した開発環境構築のワークを中心に補足するものとする.** [参考] * [Amazon EC2 > Getting started tutorial](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html) * [Remote Development using SSH](https://code.visualstudio.com/docs/remote/ssh) ### EC2インスタンスの作成 1. AWSにIAMユーザーでサインインする. 2. EC2マネジメントコンソールを開く. 3. サイドメニューの"インスタンス"を押下する. 4. 東京リージョンで"インスタンスの作成"を押下する. * ステップ1:Ubuntu Server 18.04 LTS (HVM), SSD Volume Type ami-0cc75a8978fbbc969 (64 ビット x86) * ステップ2:t2.micro * 確認と作成 * 起動 5. ポップアップウィンドウで"新しいキーペアの作成"を行う. * 任意のキーペア名を入力 * "キーペアのダウンロード"を押下 * ダウンロードしたpemファイルを,ローカルマシンの `~/.ssh` 配下へ移動 6. ポップアップウィンドウで"インスタンスの作成"を押下する. 7. インスタンスIDのリンクを押下する. 次のインスタンスの作成が開始されました: xxxx 8. インスタンスに名前をつける. ex) SAiTechEC2 すべてのインスタンスが同じ画面にリストされるため,本工程を確実に実施すること! ### セキュリティグループの作成(これはすでに作っている) 1. サイドメニューの"セキュリティグループ"を押下する. 2. "セキュリティグループを作成"を押下する. * 以下の表に記載されたセキュリティグループを作成 | セキュリティグループ名 | 情報 | VPC | インバウンドルール | | -------------------- | ---- | --------- | ------------------------------------ | | SAiTech SSH | 任意 | デフォルト | **任意の場所**からの**SSH通信を許可** | | SAiTech HTTP | 任意 | デフォルト | **任意の場所**からの**HTTP通信を許可** | | SAiTech HTTPS | 任意 | デフォルト | **任意の場所**からの**HTTPS通信を許可** | 3. EC2インスタンスに,作成したセキュリティグループをすべてアタッチする. ("アクション" -> "セキュリティ" -> "セキュリティグループの変更") 4. 検索の所で作成したセキュリティグループを検索 5. セキュリティグループを追加で下に表示させる。保存ボタンでセキュリティを割り当てる ### EC2インスタンスにSSHで入る 1. 保存したpemを.sshに入れる ```bash mv [保存したpem] ~/.ssh ``` 2. keyのアクセス権限を付ける ```bash sudo chmod 600 ~/.ssh/[作成したkey名前] ``` 3. ssh コマンドを使ってEC2インスタンスに入る ```bash ssh -i ~/.ssh/[作成したpem] ubuntu@[パブリック IPv4 DNS] ``` 4. configですぐにアクセスできるようにする(やっとくと便利) .sshの下にconfigと言うのを作って簡単にアクセスできるようにする ```config Host saitech-2kisei HostName ec2-52-195-10-10.ap-northeast-1.compute.amazonaws.com User ubuntu Port 22 Identityfile ~/.ssh/test.pem ``` スペースは半角2個 サクセスするときはHostに書いた名前で行う ```bash ssh saitech-2kisei ``` ### Apacheサーバーのインストール 1. aptコマンドで必要なモジュールをインストールする. ```bash sudo apt update sudo apt upgrade sudo apt install apache2 sudo apt install libapache2-mod-php ``` 2. `mod_ssl` モジュールを有効化してApacheサーバーを再起動する. ```bash sudo a2enmod ssl sudo a2ensite default-ssl sudo systemctl restart apache2 ``` 動いているかを確認するためのコマンド ```bash systemctl status apache2 ``` 動いている場合は `active` になっている。 ![](https://i.imgur.com/Exb6N8G.png) 3. WebブラウザでEC2インスタンスにアクセスし,`index.html` を表示する. 4. ![](https://i.imgur.com/j40Lr1l.png) --- ## laravel表示方法 [参考] * [Laravel 7.x Installation](https://readouble.com/laravel/7.x/en/installation.html) * [Troubleshooting - Composer](https://getcomposer.org/doc/articles/troubleshooting.md) ### Laravelプロジェクトの作成 1. Laravelプロジェクトの作成に必要なモジュールをインストールする. ```bash # インストール前に既存パッケージを更新 sudo apt update sudo apt upgrade sudo apt install zip unzip sudo apt install php-mbstring sudo apt install php-xml ``` 2. Composerをインストールする. ```bash sudo apt install composer # インストールが成功しているか確認 composer ``` 3. /var/www/htmlでgit cloneする ```bash sudo chown ubuntu:ubuntu /var/www/html cd /var/www/html git clone [githubのリポジトリ] ``` 4. composer installで使えるようにする。(laravelのプロジェクトの中でやる) ```bash composer update composer install ``` もしうまく動かない場合&phpのバージョンが7.2の場合 ```bash sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt update sudo apt install -y php7.3 libapache2-mod-php7.3 php7.3-mbstring php7.3-xml php7.3-bcmath php7.3 php7.3-mysql php7.3-curl sudo apt purge php7.2* sudo apt-get autoremove ``` 5. .envファイルの作成(laravelのプロジェクトの中でやる) ```bash cp .env.example .env ``` 6. プロジェクトルート配下のオーナー・パーミッションを変更する.(/var/www/htmlでやる) ```bash sudo chown -R ubuntu:www-data laravel-news sudo find laravel-news -type d -print | xargs -i chmod 750 {} sudo find laravel-news -type f -print | xargs -i chmod 640 {} sudo chmod -R 770 laravel-news/storage/ sudo chmod -R 770 laravel-news/bootstrap/cache/ ``` 7. apache2のDocumentRootの変更 ```bash cd /etc/apache2/sites-enabled sudo vim 000-default.conf ``` Documentルートを変更 ```000-default.conf DocumentRoot /var/www/html/ DocumentRoot /var/www/html/laravel-news/public/ ``` 保存するときは `:wq` で行う apache2の設定ファイルを変更したのでapache2を更新 ```bash sudo systemctl restart apache2 ``` 8. WebブラウザでEC2インスタンスにアクセスし,Welcomeページを表示する. --- ## データベース作成 [参考] * [A Quick Guide to Using the MySQL APT Repository](https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/) * [Artisan Console Tinker (REPL)](https://laravel.com/docs/7.x/artisan#tinker) ### データベースの準備 1. EC2インスタンスにMySQLのAPTリポジトリを追加する. ```bash sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 5072E1F5 # もしコマンドが失敗した場合,以下のWebページに公開されているPGP PUBLIC KEYをEC2インスタンスに手動で追加する. # https://dev.mysql.com/doc/refman/8.0/en/checking-gpg-signature.html sudo add-apt-repository "deb http://repo.mysql.com/apt/ubuntu bionic mysql-8.0" # アップデートすると出来る可能性 ``` 2. MySQL8.0をインストールする. ```bash # インストール前に既存パッケージを更新 sudo apt update sudo apt upgrade sudo apt install mysql-server # rootユーザーの初期パスワードを設定 # デフォルトの認証プラグインは,"Use Legacy Authentication Method (Retain MySQL 5.x Compatibility)"を選択 ``` ### CRUD処理の実行 1. データベースを作成する. ```bash mysql -uroot -hlocalhost -p # rootユーザーの初期パスワードでMySQLサーバーへ接続 mysql> create database `laravel-news`; ``` 2. テーブルを作成する. ```bash mysql> use `laravel-news`; mysql> create table posts (id int, title varchar(255), body text); ``` 3. SELECT, INSERT, UPDATE, DELETEクエリを実行する. ```bash mysql> insert into posts values (1, 'title01', 'body01'); mysql> select * from posts; mysql> update posts set body='updated!' where id = 1; mysql> select * from posts; mysql> delete from posts where id = 1; mysql> select * from posts; mysql> drop table posts; mysql> show tables; mysql> quit ``` ### LaravelからMySQLへの疎通確認 1. .envファイルを編集する. ```bash # laravel-news/.env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel-news DB_USERNAME=root DB_PASSWORD=[password] # rootユーザーのパスワードを入力 ``` 2. tinkerでMySQLクエリを実行する. ```bash # MySQL用のドライバをインストール sudo apt install php-mysql cd [path_to_laravel_project_root] # ニュースアプリのディレクトリを移動していない場合,パスは"/var/www/html/laravel-news" php artisan tinker >>> DB::select('select 1'); # MySQLへの接続に成功しているか確認 >>> exit ``` 以上