見出し画像

CentOS8で nginx+uWSGI + flask (Python.h: そのようなファイルやディレクトリはありません、とか、エラー: repo 'appstream' のメタデータのダウンロードに失敗しました)

※以下、自分の環境では動作していますが、問題が発生しても自己責任でお願いいたします。

手元にあるOSで、nginx + uWSGI + flask テスト構築してみたい、でも CentOS8.4のサポートはしゅーりょーしてしまっている。
なので、いろいろ問題が発生する。

$ pip3 install uwsgi
[gcc -pthread] plugins/python/python_plugin.o
    In file included from plugins/python/python_plugin.c:1:
    plugins/python/uwsgi_python.h:4:10: 致命的エラー: Python.h: そのようなファイルやディレクトリはありません
     #include <Python.h>
              ^~~~~~~~~~
    コンパイルを停止しました。

とかになる。これは、python3-devel がないから。なので、yumでさらにインストールを試みるとまたエラー。

$ sudo yum install python3-devel
CentOS Linux 8 - AppStream                       32  B/s |  38  B     00:01    
エラー: repo 'appstream' のメタデータのダウンロードに失敗しました : Cannot prepare internal mirrorlist: No URLs in mirrorlist

このサイトを参考に、 /etc/yum.repos.d/下のファイルを修正。mirrorlistをコメントし、baseurlのほうを mirror ---> vault に変更。CentOS-Linux-BaseOS.repo のほうも修正。修正後、改めて yum install python3-devel を実行し、pip3 install uwsgi でインストール。

$ sudo vi /etc/yum.repos.d/CentOS-Linux-AppStream.repo
[appstream]
name=CentOS Linux $releasever - AppStream
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
baseurl=http://vault.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
$ sudo vi /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
[baseos]
name=CentOS Linux $releasever - BaseOS #mirrorlist =http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
baseurl=http://vault.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/

flaskのテスト用に、 app.py を以下のように作ってみる。

[app.py]
# -*- coding: utf-8 -*-

from flask import Flask, request

app = Flask(__name__)
#app.config['JSON_AS_ASCII'] = False  #日本語の文字化け制御 
app.json.ensure_ascii = False        # バージョンが最新

@app.route("/")
def hello():
    return "Hello World! Flask"

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

uwsgi を port 8000で立ち上げ
$ uwsgi --http :8000 --wsgi-file app.py --callable app

curlコマンドでGET
$ curl http://127.0.0.1:8000/
Hello World! Flask が返ってくる

nginxまで書けなかった… 次回か
※追記:続き
nginx のインストール。 /etc/yum.repos.d/nginx.repo に以下のようにcentOS 8用にリポジトリ情報を書く。

$ sudo vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/
gpgcheck=0
enabled=1

$ sudo yum install nginx でインストール
$ sudo systemctl start nginx でスタート

ブラウザで http://localhost/にアクセスするとdefaultページが表示される(はず)。赤が基調のRedHat Enterprise Linux などが表示される。OS起動時に自動でnginxを立ち上げたいときには以下を参照。

自動起動と確認
# systemctl enable nginx
# systemctl list-unit-files --type=service |grep nginx
nginx.service                              enabled

この記事が気に入ったらサポートをしてみませんか?