Ubuntu 20.04でLNMP環境を構築する方法

Ubuntu 20.04でLNMP環境を構築する方法

簡単な説明

以前 Centos7 で構築し、その後個人開発環境として Ubuntu 20.04 を使っていたため、Ubuntu でも環境を構築したいと考えました。 Centos とは若干異なる部分もあるため、学習用として記録しておきます。

インストール前の準備

ソフトウェアをダウンロード:
php:7.3.18
nginx: 1.18.0
マリアdb:10.5.4

ファイルを解凍します:

tar zxf php-7.3.18.tar.gz
tar zxf mariadb-10.5.4.tar.gz
tar zxf nginx-1.18.0.tar.gz 

Nginxをインストールする

sudo groupadd -r nginx && sudo useradd -r -g nginx -s /sbin/nologin -d /usr/local/nginx nginx
sudo apt install -y libpcre3-dev zlib1g-dev
cd /home/allen/Downloads/nginx-1.18.0
./configure --user=nginx --group=nginx
make -j 4 && sudo make install
sudo /usr/local/nginx/sbin/nginx -t
#nginx: 設定ファイル /usr/local/nginx/conf/nginx.conf の構文は正常です
#nginx: 設定ファイル /usr/local/nginx/conf/nginx.conf のテストが成功しました
sudo mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.back
sudo vim /usr/local/nginx/conf/nginx.conf

ユーザー nginx;
ワーカープロセス 4;
イベント {
  ワーカー接続 1024;
}
http {
  mime.types を含めます。
  デフォルトタイプ アプリケーション/オクテットストリーム;
  ファイル送信オン;
  キープアライブタイムアウト65;
  log_format main '$remote_addr || $remote_user || $time_local || $request || $status || $body_bytes_sent || $http_referer || $http_user_agent || $http_x_forwarded_for';
  /data/www/*/*.conf をインクルードします。
} 

sudo chown -R nginx:nginx /usr/local/nginx

sudo vim /lib/systemd/system/nginx.service

[ユニット]
説明=nginx
後=ネットワーク.ターゲット

[サービス]
タイプ=フォーク
実行開始=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s 再ロード
ExecStop=/usr/local/nginx/sbin/nginx -s 終了
プライベートTmp=true

[インストール]
WantedBy=マルチユーザー.ターゲット


sudo systemctl nginx を有効にする

# シンボリックリンク /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service を作成しました。

リブート

再起動後、正常に起動するか確認します。

Mariadbをインストールする

sudo rm -rf /etc/mysql
sudo apt 削除 -y mysql-common
sudo apt 自動削除 -y
sudo apt install -y cmake libncurses5-dev libgnutls28-dev
sudo groupadd -r mysql && sudo useradd -r -g mysql -s /sbin/nologin -d /usr/local/mariadb mysql
sudo mkdir -p /data/db /var/log/mariadb
cd /home/allen/Downloads/mariadb-10.5.4/
cmake 。-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb -DMYSQL_DATADIR=/data/db -DSYSCONFDIR=/etc -DWITHOUT_TOKUDB=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci
make -j 4 && sudo make install
sudo /usr/local/mariadb/scripts/mysql_install_db --user=mysql --datadir=/data/db
sudo vim /etc/my.cnf

[mysqld]
データディレクトリ = /data/db
ソケット = /tmp/mysql.sock
# さまざまなセキュリティリスクを防ぐためにシンボリックリンクを無効にすることをお勧めします symbolic-links = 0
照合サーバー = utf8mb4_general_ci
init-connect = '名前を設定する utf8mb4'
文字セットサーバー = utf8mb4

[mysql]
デフォルトの文字セット = utf8mb4

[クライアント]
ポート = 3306
ソケット = /tmp/mysql.sock
デフォルトの文字セット = utf8mb4

[mysqld_safe]
ログエラー = /var/log/mariadb/mariadb.log
pid ファイル = /var/run/mariadb/mariadb.pid

sudo cp /usr/local/mariadb/support-files/mysql.server /etc/init.d/mariadb

sudo vim /etc/profile.d/mariadb.sh
エクスポート PATH=$PATH:/usr/local/mariadb/bin/

sudo chmod 0777 /etc/profile.d/mariadb.sh
ソース /etc/profile.d/mariadb.sh

sudo /etc/init.d/mariadb を起動します
#mariadb を起動しています (systemctl 経由): mariadb.service。

sudo /usr/local/mariadb/bin/mysql_secure_installation 	 

#注意: このスクリプトのすべての部分を実行することは、すべてのMariaDBで推奨されます。
# 本番環境で使用されているサーバー! 各ステップを注意深くお読みください!

#MariaDBにログインしてセキュリティを確保するには、現在の
#rootユーザーのパスワード。MariaDBをインストールしたばかりで、
#まだルートパスワードを設定していないので、ここで Enter キーを押すだけです。

#ルートの現在のパスワードを入力してください (パスワードがない場合は入力してください): 
#OK、パスワードの使用に成功しました。次に進みます...

#ルートパスワードを設定するかunix_socketを使用すると、誰も
#適切な権限がなくてもMariaDBのルートユーザーにログインできます。

#ルート アカウントはすでに保護されているため、安全に「n」と答えることができます。

#unix_socket認証に切り替える [Y/n] y
#有効化に成功しました!
#権限テーブルを再読み込みしています。
# ... 成功!


#ルート アカウントはすでに保護されているため、安全に「n」と答えることができます。

#ルートパスワードを変更しますか? [Y/n] y
#新しいパスワード: 
#新しいパスワードを再入力してください: 
#パスワードが正常に更新されました!
#権限テーブルを再読み込みしています。
# ... 成功!


#デフォルトでは、MariaDBのインストールには匿名ユーザーがあり、誰でも
#ユーザーアカウントを作成せずにMariaDBにログインするには
#them。これはテストのみを目的としており、インストールを確実にするために
#もう少しスムーズに。
#本番環境。

#匿名ユーザーを削除しますか? [Y/n] y
# ... 成功!

#通常、rootは「localhost」からのみ接続を許可されます。これは
#ネットワークから誰かがルートパスワードを推測できないようにします。

#リモートからのルートログインを禁止しますか? [Y/n] n
# ... スキップします。

#デフォルトでは、MariaDBには誰でも使用できる「test」という名前のデータベースが付属しています。
#access。これもテストのみを目的としており、削除する必要があります
#本番環境に移行する前に。

#テストデータベースとそれへのアクセスを削除しますか? [Y/n] y
# - テスト データベースを削除しています...
# ... 成功!
# - テスト データベースの権限を削除しています...
# ... 成功!

#権限テーブルを再読み込みすると、これまでに加えられたすべての変更が確実に反映されます
#すぐに有効になります。

#権限テーブルを今すぐ再読み込みしますか? [Y/n] y
# ... 成功!

#クリーンアップ中...

#完了です!上記の手順をすべて完了すると、MariaDB
#インストールは安全になるはずです。

#MariaDB をご利用いただきありがとうございます!

sudo systemctl でmariadbを有効にする 

sudo chown mysql:mysql -R /usr/local/mariadb /data/db /var/log/mariadb

リブート

再起動後、正常に起動するか確認します。

PHPをインストールする

sudo apt install -y libxml2-dev libssl-dev libbz2-dev libcurl4-gnutls-dev libjpeg-dev libpng-dev pkg-config libxslt1-dev libzip-dev libfreetype6-dev libfontconfig1-dev autoconf
sudo groupadd -r php && sudo useradd -r -g php -s /sbin/nologin -d /usr/local/php php
sudo vim /etc/sudoers
php ALL=(ALL:ALL) ALL
cd /home/allen/Downloads/php-7.3.18/


./CONFIGURE -PREFIX =/usr/local/php \  -  exec-prefix =/usr/local/php-with-fpm-user = php-with-fpm-group = php-with-curl -with-gettex -pdo-mysql-with-pdo-sqlite -with-pear -with-xmlrpc -with-xsl -with-zlib -with-mhash-with-mhash-bcmath- -enable-sysvsem  -  enable-sysvshm  -  enable-xml -enable-fpm -with-freeType-dir -with-gd-with-libxml-dir -with-pcre-regex-enable-libxml -eenable-zip -with-png-dir -jpeg-dirir

エラーがあります:

configure: エラー: freetype-config が見つかりません。

解決:
言われている:https://www.doopsky.com/ops/981.html

これは、Ubuntu 19.04でapt-getによってインストールされたlibfreetype6-devのバージョンが2.9.1-3であるためです。
http://changelogs.ubuntu.com/changelogs/pool/main/f/freetype/freetype_2.9.1-3/changelog
変更ログには次のように書かれています:

`freetype-config' スクリプトはデフォルトではインストールされなくなりました
(クローズ: #871470、#886461)。libfreetype6-dev に依存するすべてのパッケージ
関連する CFLAGS とライブラリを見つけるには、pkg-config を使用する必要があります。
freetype-config は pkg-config に置き換えられ、新しいバージョンでは pkg-config を使用して CFLAGS とライブラリを管理します。

したがって、解決策は次のようになります。
主なアイデアは、freetype-config の代わりに pkg-config を使用することです。上記ですでにインストールしたpkg-configをインストールします。

cat ./configure | grep "freetype-config" -n
34847: テスト -f "$i/bin/freetype-config"; の場合
34849: FREETYPE2_CONFIG="$i/bin/freetype-config"
34855: as_fn_error $? "freetype-config が見つかりません。" "$LINENO" 5
36568: テスト -f "$i/bin/freetype-config"; の場合
36570: FREETYPE2_CONFIG="$i/bin/freetype-config"
36576: as_fn_error $? "freetype-config が見つかりません。" "$LINENO" 5

sed -i "s/freetype-config/pkg-config/g" ./configure
cat ./configure | grep "FREETYPE2_CONFIG --cflags" -n
34858: FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags`
36579: FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags`

sed -i "s/FREETYPE2_CONFIG --cflags/FREETYPE2_CONFIG freetype2 --cflags/g" ./configure
cat ./configure | grep "FREETYPE2_CONFIG --libs" -n 
34859: FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs`
36580: FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs`

sed -i "s/FREETYPE2_CONFIG --libs/FREETYPE2_CONFIG freetype2 --libs/g" ./configure
cat ./ext/gd/config.m4 | grep "freetype-config" -n
188: テスト -f "$i/bin/freetype-config"; の場合
190: FREETYPE2_CONFIG="$i/bin/freetype-config"
196: AC_MSG_ERROR([freetype-configが見つかりません。])

sed -i "s/freetype-config/pkg-config/g" ./ext/gd/config.m4

再コンパイルしてインストールOK

PHPをご利用いただきありがとうございます。

make -j 4 && sudo make install

sudo cp php.ini-production /usr/local/php/lib/php.ini

sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

vim /usr/local/php/etc/php-fpm.d/www.conf
リスンモード = 0666
午後最大子供数 = 128
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
午後最大リクエスト数 = 10000
スローログ = log/$pool.log.slow
制限ファイル数 = 1024

sudo vim /etc/profile.d/php.sh
エクスポート PATH=$PATH:/usr/local/php/bin/

sudo chmod 0777 /etc/profile.d/php.sh && ソース /etc/profile.d/php.sh

sudo cp sapi/fpm/php-fpm.service /etc/systemd/system/php.service

xdebugをインストールする

xdebug をダウンロード http://pecl.php.net/get/xdebug-2.9.6.tgz

cd /home/allen/download tar zxf xdebug-2.9.6.tgz
xdebug-2.9.6 を CD してください
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make -j 4 && sudo make install

Apcuのインストール

Apcu をダウンロード http://pecl.php.net/get/apcu-5.1.18.tgz

cd /home/allen/Downloads tar zxf apcu-5.1.18.tgz
cd apcu-5.1.18
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make -j 4 && sudo make install

PHP.INIを編集する

須藤 
vim /usr/local/php/lib/php.ini

date.timezone = Asia/上海
expose_php = オフ
最大実行時間 = 0
メモリ制限 = 4096M
display_errors = オン
cgi.fix_pathinfo=0
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/"
拡張子=pgsql
拡張子=apcu

zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so
[xデバッグ]
xdebug.var_display_max_children=10240
xdebug.var_display_max_data=20480
xdebug.var_display_max_depth=50

起動する

sudo systemctl php-fpm を有効にする

sudo chown -R mysql:mysql /usr/local/mariadb
sudo chown -R nginx:nginx /usr/local/nginx
sudo chown -R php:php /usr/local/php
リブート

Ubuntu 20.04 で LNMP 環境を構築する手順については以上です。Ubuntu 20.04 で LNMP を構築する手順の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Ubuntu は Docker をベースに LNMP+Redis 開発環境を構築します (画像とテキスト)

<<:  MySQL サーバーの接続、切断、および cmd 操作

>>:  ノードにおけるhttpモジュールの使用と実行プロセス

推薦する

MySQL のスケジュールされた完全なデータベースバックアップ

目次1. MySQLデータのバックアップ1.1、データをバックアップするためのmysqldumpコマ...

よく使われるn番目の子セレクターをまとめる

序文フロントエンドプログラミングでは、奇数、偶数などの数値を受け入れることができる nth-chil...

2012年のベストWebデザイン作品レビュー[パート1]

新年の初めに、友人の健康と2013年が素晴らしい年となることを心からお祈りいたします。この記事では、...

RedisとMySQLの違いを簡単に説明してください

MySQL はディスクに保存される永続的なストレージであり、取得には一定の IO が伴うことはご存じ...

「@INC で ExtUtils/MakeMaker.pm が見つかりません」というエラーを解決する

mha4mysql をインストールする場合の手順は、おおよそ次のようになります: unzip、per...

リモートDockerを使用した統合テスト環境の構築手順

需要背景チームには統合テストが必要であり、そのためには、mysql や rabbitmq などのミド...

Ubuntu でパスワードを変更し、パスワードの複雑さのポリシーを設定する方法

1. パスワードを変更する1. 一般ユーザーのパスワードを変更する パスワード現在のパスワードを入力...

VMware仮想マシンにLinux(CentOS)をインストールするための詳細な構成手順

CentOS7をダウンロード私がダウンロードしたイメージはCentOS-7-x86_64-DVD-1...

知っておくべき 18 の Web ユーザビリティの原則

世界最高のビジュアル デザイン スキルを持っていたとしても、訪問者がページ間やアイテム間を快適に移...

Linux gzip コマンドのファイル圧縮実装原理とコード例

gzip は、Linux システムでファイルの圧縮と解凍によく使用されるコマンドです。このコマンドで...

MySQL 5.7.21 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.21のインストールに関する注意事項をまとめ、皆さんと共有します。 ...

mysql はインデックスを無効にしますか?

mysql の IN はインデックスを無効にしますか?しませんよ! 結果をご覧ください: mysq...

MySQLが正常にインストールされたかどうかを確認する方法

MySQL をインストールした後、DOS ウィンドウまたは MySQL 5.7 コマンドライン クラ...

JavaScript と JQuery フレームワークの基本チュートリアル

目次1. JS オブジェクトDOM –1、機能–2、テスト3. jQuery –1. 概要–2、使用...