LoginSignup
0
0

More than 1 year has passed since last update.

RockyLinuxFlaskとVue.js を動かす

Last updated at Posted at 2022-11-16

アップデート

sudo dnf -y update

ネットワーク設定 自動接続有効化

  1. ens0s3 (DHCP)
nmcli c up enp0s3
nmcli c mod enp0s3 connection.autoconnect yes

SELinuxを無効

確認コマンド

getenforce

状態の内容

enforcing 有効化状態
permissive ログだけ記録状態
disabled 無効化状態

詳細を確認する

sestatus

SELinux 一時的に無効化

sudo setenforce 0

SELinux 永続的に無効化

永続的に無効化するには「/etc/selinux/config」を変更します。

バックアップを作成。

sudo cp -piv /etc/selinux/config /etc/selinux/config.`date "+%Y%m%d"`

/etc/selinux/configを編集

sudo vi /etc/selinux/config

「enforcing」をコメントアウトして「disabled」を追加

#SELINUX=enforcing
SELINUX=disabled

ツールをインストール。

sudo dnf groupinstall "Development Tools" -y
sudo dnf install openssl-devel libffi-devel bzip2-devel -y

※wgetコマンドがなければインストールしておきます。

sudo dnf install wget -y

Python 3.10.7ダウンロード

wget https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tar.xz
tar -xf Python-3.10.7.tar.xz
cd Python-3.10.7 && ./configure --enable-optimizations
make
sudo make install
sudo make altinstall

update-alternativesを使ったバージョン変更

update-alternatives

pip3 をアップデート

pip3 install --upgrade pip

OS再起動

※再起動しないと反映されない

reboot

確認コマンド

python3 -V
pip3 --version

Flaskインストール

dnf install python3-flask

Pythonのモジュールインストール

pip3 install -U flask-cors
pip uninstall mecab-python3
pip install mecab-python3

mod_wsgiの導入

pip install mod_wsgi
pip install mod-wsgi-httpd

Apache(httpd)のインストール

dnf install -y httpd httpd-tools httpd-devel httpd-manual

インストールの確認

以下のコマンドでインストールされていることを確認。

dnf list --installed | grep httpd

Apache起動

systemctl start httpd

Apache状態確認

systemctl status httpd.service

自動起動を有効

systemctl enable uwsgi

Apache再起動

systemctl restart httpd.service

Apache状態確認

systemctl status httpd.service

ディレク構成

var/www/flask/
 └─backend/
 |   ├─ flask.wsgi
 |   ├─ server.py
 |   └─ utils.py
 └─frontend/app/
    ├── README.md 
    ├── build             // ビルド用スクリプトを格納
    ├── config            // ビルド用設定ファイルを格納
    ├── index.html        // インデックス、最終的にこのファイルに描画される
    ├── node_modules      // パッケージを格納
    ├── package-lock.json // パッケージのバージョン情報
    ├── package.json      // スクリプトやインストールされたパッケージの情報
    ├── src               // ビルド対象のファイルを格納
    ├── public            // ビルド対象のファイルを格納
    └── static            // 静的ファイルを格納

ディレク作成後移動

mkdir /var/www/flask/ && cd $_

# 設定ファイルの作成
設定ファイルにVirtualHostを追加する。
/etc/httpd/conf/httpd.conf に追記するか、
/etc/httpd/conf.d/にwsgi.confファイルを作成して下記のように記述。

vim /etc/httpd/conf.d/wsgi.conf
# wsgi.conf
<VirtualHost *:80>
    serverName localhost
    
    WSGIDaemonProcess myapp user=apache  group=apache threads=5
    WSGIScriptAlias / /var/www/flask/backend/flask.wsgi
    
    <Directory /var/www/flask/backend/>
        WSGIProcessGroup myapp
        WSGIApplicationGroup %{GLOBAL}
        WSGIScriptReloading On
        Require all granted
    </Directory>
</VirtualHost>

以下の個所は作成フォルダーを記載する

 <Directory /var/www/任意の場所>

.wsgiファイルを作成

/var/www/Flask/backend/にflask.wsgiファイルを作成

mkdir /var/www/flask/backend/ && cd $_

# coding: utf-8
import sys

sys.path.insert(0, '/var/www/Flask/backend/')

from myapp import app as application

Hello, World!を表示
myapp.pyを/var/www/Flask/backend/に作成

server.py

from flask import Flask
from flask import request, make_response, jsonify
from flask_cors import CORS
from utils import wakati
from flask import Flask, render_template


app = Flask(__name__, static_folder='../frontend/dist/static', template_folder='../frontend/dist')

@app.route('/',defaults={'path':''})
@app.route('/<path:path>')
def index(path):
    return render_template('index.html')


if __name__ == "__main__":
    app.debug = True
#    app.run(host='127.0.0.1', port=5000)

#フロント側


	
Node.js 16 をインストールします。
現在、有効になっている Node.js のバージョンを確認してインストールします。
dnf module list nodejs


# 他バージョンが有効な場合は一旦リセットして有効バージョンを切り替え
dnf module reset nodejs
dnf module enable nodejs:16

Node.js 16 を指定してインストール

dnf module -y install nodejs:16

バージョン確認

 node -v

以下が表示されればOK
v16.17.0

yarnインストール

npm install -g yarn

Create React App はReactの環境構築ツールで一度インストールしてしまえばコマンド一つでReactに必要な環境を構築することができます。

Create React Appのインストールはnode.jsがインストールされている環境で以下のコマンドを入力することでインストールできます。

npm install -g create-react-app

エラーが出たら以下コマンドを入力
npm i tar      

必要なライブラリをインストール

FastAPIを使う上で必要なライブラリは2つあります。

fastapi
uvicorn
の2つです。fastapiはFastAPI本体で、uvicornはローカルで動くサーバーです。この2つのライブラリがないと動作しないので、忘れずにinstallしましょう。

$ pip install fastapi uvicorn

Reactプロジェクト作成

インストールが完了したらプロジェクトを作成したいフォルダ上で以下のコマンドで
Reactプロジェクトを作成します。

create-react-app プロジェクト名

今回の場合は以下
create-react-app frontend

「Happy hacking!」と表示されたら「Create React App」のインストールは成功です。

Create React Appの利用方法

以下のコマンドでプロジェクトフォルダに移動して、
cd frontend
以下のコマンドでCreate React Appを起動します。

npm start
Yarnをインストールしている環境では以下のコマンドでも実行できます。

yarn start
少しまつと http://localhost:3000 のURLでブラウザが立ち上がり Create React App の初期画面が表示されます。

Create React Appはローカルで開発できるようローカルサーバーも含めて用意されており、上記のコマンドで開発環境が立ち上がります。

試しに少し編集してみましょう。先ほど確認した src/App.js のh1要素を以下のように変更してファイルを保存します。

Create React Appで本番公開

作成したアプリケーションを本番公開するには npm run build とコマンドを入力します。

自動生成された雛形の中のApp.jsを書き換え

App.js
import React from 'react';
import './App.css';
import Axios from 'axios';

//function App() {
export class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: ''};

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  render() {
    return (
      <div className="App">
        <header className="App-header">
          <h1>text parser</h1>
          <form onSubmit={this.handleSubmit}>
            <label>
              <textarea name="text" cols="80" rows="4" value={this.state.value} onChange={this.handleChange} />
            </label>
            <br/>
            <input type="submit" value="Parse" />
          </form>
        </header>
      </div>
    );
  }


  wakati = text => {
    //console.log("input text >>"+text)
    Axios.post('http://127.0.0.1:5000/wakati', {
      post_text: text
    }).then(function(res) {
      alert(res.data.result);
    })
  };

  handleSubmit = event => {
    this.wakati(this.state.value)
    event.preventDefault();
  };

  handleChange = event => {
    this.setState({ value: event.target.value });
  };
}

export default App;

npm run build

以下のエラーが出力された
Module not found: Can't resolve 'axios' in ' 〜

以下のコマンドを入力
npm install axios

rm -rf node_modules package-lock.json && npm install

この中の以下の部分でサーバー側とのやり取りを行なっています。

  wakati = text => {
    //console.log("input text >>"+text)
    Axios.post('http://127.0.0.1:5000/wakati', {
      post_text: text
    }).then(function(res) {
      alert(res.data.result);
    })
  };

server.pyで立てたhttp://127.0.0.1:5000/wakatiにthis.state.valueの値をポストします。
サーバー側で処理された後、返ってきたresultの値がalert(res.data.result);によってブラウザに表示されます。

動かす

フロントエンド/バックエンド用にそれぞれターミナルを立ち上げて以下のコマンドを実行します。

サーバー側

cd backend
python server.py

フロント側

cd frontend/app
yarn start

ビルド

 npm run build

git hubでフォルダートラッキングの対象を記載

.gitignore

エラーログ場所

Apache
/var/log/httpd

Vue.js
/root/.npm/_logs/

gitのlog確認

git log --oneline

git 履歴を戻す

git reset --hard 番号

npm install @vue/compiler-sfc
npm install vue@next

PostgreSQL14をインストール

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
関係データ削除

CentOS標準で使えてPostgreSQLの無効化。

 sudo dnf -qy module disable postgresql

エラーが出たら以下を実行

■ 対策
・バックアップ

sed -iBAK '/^failovermethod=/d' /etc/yum.repos.d/*.repo

・文字の置き換え

sed '/^failovermethod=/d' /etc/yum.repos.d/*.repo

PostgreSQLサーバーのインストール。

sudo dnf install -y postgresql14-server

バージョン確認

 psql --version

初期化

sudo PGSETUP_INITDB_OPTIONS='--encoding=UTF-8 --no-locale' /usr/pgsql-14/bin/postgresql-14-setup initdb

以下のエラーが出力されたら、データを消してやり直す

Data directory is not empty!

関係データ削除

rm -fr /var/lib/pgsql/14/data/* 

カラム作成

/usr/pgsql-14/bin/postgresql-14-setup initdb

systemdのサービスとして有効化して

systemctl enable postgresql-14

ステータス確認

systemctl status postgresql-14

各種ファイルなど/var/lib/pgsql/14ディレクトリにあります。

sudo ls -l /var/lib/pgsql/14

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0